进程管理1

Posted by BY beta on May 30, 2020

前言

操作系统为上层应用提供一个有关底层硬件资源的抽象,和管理。

因此,操作系统的核心三个任务分别是:CPU资源管理、内存资源管理、IO管理

进程

进程在内存中的存储结构

image-20210221163524890

系统调用、异常

用户态的进程如果想要启动另一个进程,必须依赖于内核system call,在这个过程中涉及到用户态和内核态的切换。


systemcall 是什么

涉及到硬件资源或者敏感资源,只能由内核来管理。连接用户态和内核态的桥梁。

在linux系统中, 系统调用通过 int 80实现。

kernel中存在一张系统调用表,int80执行之后;会去查看相关寄存器的值与系统调用表,找到需要执行的内核服务。

image-20210221164245256

异常exception是控制流中的突变,用来响应处理器状态的某些状态。异常可分为四类:中断interrupt、陷阱trap(陷阱和系统调用)、故障fault、终止abort。

常见的x86异常:【0 出发错误、14 缺页故障】

image-20210221201910292

进程启动需要先通过异常进入kernel空间,IDTR指向异常表,找到异常的类型、int80;在查找系统调用表,找到fork:异常表-》系统调用表

image-20210221204322281

各类中断的处理过程

image-20210222195915219

进程A 状态保存

系统调用过程中,不会涉及进程用户态资源,也不会切换进程。

program 和process

程序与进程,程序是存储于硬件上的文件,静态。进程是程序加载到内存中,执行,动态

进程创建

依赖于fork和exec

fork会将父进程的task structure复制给子进程,原因子啊与父进程与子进程最相似,且此操作速度很快。

进程B的描述符是由父进程A创建,尽管描述符属于A;

进程B的描述符由父进程,或父进程的父进程清理。

进程A调用int80,fork函数;复制父进程的描述符给子进程B,修改B的描述符

image-20210221213347602