操作系统进程线程笔记

进程

1.进程创建,创建PCB,分配地址空间,初始化PCB(比如状态设为就绪) 

2.调度就是决定哪个进程去获取cpu,进入执行状态。有多个就绪队列,不同种类的进程会进到对应的就绪队列等待被调度。调度算法会决定哪个进程进入cpu执行。 

3.时间片用完,停止运行,保存寄存器信息到PCB,修改进程状态为就绪。

4.如果进程运行到I/O阻塞了,就会让出cpu进入阻塞状态,并且加入到阻塞队列(不同阻塞原因对应不同阻塞队列),I/O设备完成后会触发事件,唤醒对应的进程,修改状态为就绪,并且加入到就绪队列。

系统调度进程的过程:
1、查该进程的PCB,获取其状态、优先级
2、根据PCB保存的处理机状态信息,恢复现场
3、根据PCB中程序和数据的内存始址,找到其程序和数据
4、执行中的同步信号等也要查阅PCB,暂停时进程执行的处理机环境保存回PCB。

对于每一个进程,操作系统都使用一个特定的进程控制块(PCB)来表示,它包含了许多与一个特定进程相关的信息,例子如下:

进程控制块(PCB)

在PCB中,一般包括如下信息:

1、 进程的状态:状态科包括新建态、就绪态、运行态、终止态、阻塞态。

2、 程序计数器:用于记录进程要执行的下一条指令的地址。

3、 CPU寄存器这些信息CPU寄存器包括累加器,索引寄存器,堆栈指针,通用寄存器和其他一些条件码信息寄存器。这些信息描述了程序执行的状态,与程序计数器一起保存,以便进程以后的正确执行。

4、 CPU调度信息:这类信息包括进程的优先级,调度队列的指针和其他调度参数,为操作系统管理进程并进行调度提供支持。

5、 内存管理信息:根据操作系统对内存的使用情况,记录下基址,界限寄存器,页表、段表等信息。

6、 记账信息:包括CPU时间,实际使用时间,时间界限,使用数据,记账数据,作业和进程数量等。

7、 I/O状态信息包括分配给进程的I/O设备表,打开的文件列表等。

Linux进程创建

1.fork函数创建,这种方式创建的子进程就是复制父进程的所有变量,资源,代码,程序计数器。返回子进程id。子进程是从fork()代码后面开始执行的。

2.exec函数族,传入一个可执行文件路径,创建一个子进程。子进程和父进程没啥具体关系。

线程控制块 TCB

线程 = 进程-公共资源

线程状态,程序计数器(下一个指令),寄存器,堆栈

线程的状态

运行,阻塞,就绪,终止四种状态。被阻塞的线程正在等待某个释放他的事件,例如一个线程执行从键盘读入数据时,该线程被阻塞直到输入事件。就绪表示线程可被调度运行,运行表示线程拥有cpu。

实现线程的几种方式

1.使用内核线程实现

通过OS创建,管理线程,比如分时系统,分配一个单位时间给线程。

2.使用用户线程实现

系统内核不能感知线程存在的实现。用户线程的建立、同步、销毁和调度完全在用户态中完成,不需要内核的帮助。如果程序实现得当,这种线程不需要切换到内核态,因此操作可以是非常快速且低消耗的,也可以支持规模更大的线程数量,部分高性能数据库中的多线程就是由用户线程实现的。这种进程与用户线程之间1:N的关系称为一对多的线程模型。OS分配一个单位时间是给进程的,然后进程里面的多个线程再分这个时间。

3.使用用户线程加轻量级进程混合实现。

https://www.cnblogs.com/lixiaochao/p/9490264.html

进程,线程,协程的关系

猜你喜欢

转载自blog.csdn.net/littlexiaoshuishui/article/details/101017833
今日推荐