前言
操作系统为上层应用提供一个有关底层硬件资源的抽象,和管理。
因此,操作系统的核心三个任务分别是:CPU资源管理、内存资源管理、IO管理
进程
进程在内存中的存储结构

系统调用、异常
用户态的进程如果想要启动另一个进程,必须依赖于内核system call,在这个过程中涉及到用户态和内核态的切换。
systemcall 是什么
涉及到硬件资源或者敏感资源,只能由内核来管理。连接用户态和内核态的桥梁。
在linux系统中, 系统调用通过 int 80实现。
kernel中存在一张系统调用表,int80执行之后;会去查看相关寄存器的值与系统调用表,找到需要执行的内核服务。

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

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

各类中断的处理过程

进程A 状态保存
系统调用过程中,不会涉及进程用户态资源,也不会切换进程。
program 和process
程序与进程,程序是存储于硬件上的文件,静态。进程是程序加载到内存中,执行,动态
进程创建
依赖于fork和exec
fork会将父进程的task structure复制给子进程,原因子啊与父进程与子进程最相似,且此操作速度很快。
进程B的描述符是由父进程A创建,尽管描述符属于A;
进程B的描述符由父进程,或父进程的父进程清理。
进程A调用int80,fork函数;复制父进程的描述符给子进程B,修改B的描述符
