本文借鉴了中国大学MOOC骆斌老师和苏曙光授课课件,以及《深入理解计算机系统》这本书的知识,CSDN一些博客等,对OS中进程的知识点整理了一下。后续也可能会添加更多博客中的知识点。

进程

什么是进程

进程的经典定义就是执行中程序的实例,或是操作系统对正在运行的程序的一个管理实体。
进程也是对资源调度的单位。

进程的五个实体部分

数据结构P,程序的内存代码C,程序的内存数据D,程序的通用寄存器信息R和程序状态字信息PSW。

进程的状态

运行态:进程占有处理器运行
就绪态:进程具备运行条件在等待处理器
等待态:进程由于等待资源、输入输出、信号等而不具有运行条件
这三种状态可以通过事件来进行切换,如
图片说明
此外还有僵死态(TASK_ZOMBIE):进程终止被执行,释放大量资源;
挂起态(TASK_STOPPED):进程被挂起。
图片说明

进程的控制

创建、阻塞、唤醒、撤销。

创建进程

创建进程控制块PCB,获得并赋予标识符PID,为进程分配空间,初始化PCB,插入进程队列。

撤销进程

撤销一个指定进程,收回进程占用资源,撤销PCB。

进程阻塞

原因:请求系统服务;数据尚未到达;启动新的操作;无新任务可做,自我阻塞等。

进程唤醒

系统服务由不满足到满足;完成IO操作;数据到达;进程提出新的请求等情况。

进程调度算法

先来先服务算法(FCFS),轮转调度算法(RR),完全公平算法(CFS),短进程优先(SPN),高响应比优先算法(HRRN)等。
整理了一些描述比较清楚的博客
https://blog.csdn.net/sayhello_world/article/details/55802928
https://blog.csdn.net/acm_yuuji/article/details/50155123
https://www.cnblogs.com/tianguiyu/articles/6091378.html
https://linux.cn/article-7325-1.html
https://blog.csdn.net/xieminyao123/article/details/79116985

互斥与同步

互斥:多个进程共享了某个独占性资源,必须协调各个进程存取资源的顺序,确保没有2个或以上的进程同时使用同个资源。
同步:若干合作进程协调运行步伐。进程A的继续运行取决于进程B是否完成了某个操作,或者进程B的继续运行取决于A是否完成了某个操作,否则只能等待。(例如司机开车停车和售票员开门关门)。

进程通信的常见方式

管道,消息队列,共享内存,信号量,Socket,信号,文件锁。
https://blog.csdn.net/wm12345645/article/details/82381407

锁机制访问临界区

实现进程互斥地访问临界资源(如某一个全局变量int i)。
进程在进入临界区前会执行一个Lock(S)的操作,出了临界区会执行UnLock(S)。进程A进入临界区前,S=1,则令S=0(上锁),然后执行程序;此时进程B也要进入临界区,发现S=0,则不断执行Lock(S)的循环,直至S变为1为止(此时进程A已经出了临界区,执行UnLock(S)将S置为1)。

使用P-V操作来实现上锁开锁操作

P(S,q)和V(S,q)————其中S为信号量,q为队列

进程上下文

上下文(context)由程序正确运行所需的状态组成。状态包括存放在内存中的代码和数据,它的栈,通用寄存器的内容,程序计数器,环境变量以及打开文件描述符的集合。

线程

什么是线程

线程是程序中完成一个独立任务的完整执行序列,即一个可调度实体。

分类

根据运行环境和调度者的身份,分为:
内核线程(或轻量级线程,LWP):运行在内核空间,由内核来调度。
用户线程:运行在用户空间,由线程库来调度。
内核线程是用户线程的“容器”,当进程的一个内核线程获得cpu使用权时,调度一个用户线程。因此,一个进程可以有M个内核线程和N个用户线程,那么具有M<=N的关系。

线程实现方式

完全在用户空间实现

完全在用户空间实现的线程,由线程库管理时间片和优先级,利用longjmp来切换线程,内核完全不知情。也就是说,内核仍然是把进程作为最小的调度单位来进行调度,这些线程共享该进程的时间片,对外表现相同的优先级。
优点:创建和调度线程快;无需占用内核资源;
缺点:对于多核处理器,无法使一个进程中的多个线程运行在不同的cpu上;无法比较不同进程中的线程优先级。
M:N=1:N

完全由内核调度

将创建和调度线程的工作交给了内核,因此与完全在用户空间中的优缺点互换。满足M:N=1:1。

双层调度

是前两种实现模式的混合体,内核调度M个内核线程,线程库调度N个用户线程,结合了前两种方式的优点。