计算机专业课系列之三:进程和线程

一,操作系统的关键抽象

解析:

1,把IO设备抽象成文件,这样用户不用直接面对硬盘做操作了,因为硬盘是复杂的机械式设备(磁盘块,旋转,扇区等)。操作系统不仅把IO设备抽象成文件。还包括控制台,输入输出设备都可以抽象成文件。

2,物理主存+IO设备 抽象成 虚拟存储器。虚拟存储器是对内存和硬盘的抽象,他让每个进程都有一个超级大的内存空间。(因为内存的大小是  有限的,不可能把所有的进程都放到内存中,所以操作系统给每个进程一个独立的虚拟地址空间,这个独立的虚拟地址空间会被映射到真  实的内存空间,程序看起来是在运行,但是可能只有一小段的代码被调到的真实的内存中,并不是所有的程序代码都调入内存中去了)

3,cpu抽象成指令集,

4,操作系统 + 存储器 抽象成 进程

5,操作系统 + 进程 抽象成 虚拟机。比如云计算就用到虚拟机。

 二,进程的比喻

三,内存中的进程

进程在虚拟存储器中的逻辑布局

 操作系统切换进程

内存中有一个数据结构叫:PCB,专门用来保存上下文的。

 

当cpu时间片用完后,从运行态到就绪态

当发生阻塞时,从运行态到等待

进程的调度:

dos系统,win3.1系统都是非抢占式,不适合交互式操作。

批处理系统的调度

交互式系统的调度

 

进程间同步:

经典的生产者消费者问题

 问题:

代码中的count++,其实机器语言执行时需要三步。

register = counter; 把内存中的值放入寄存器中

register = register + 1; 寄存器进行自增操作

counter = register;  再把寄存器中的值写会内存中

一个指令周期内不能一下子完成上面三条指令。那么在并发情况下就会出错。所以要加锁,等这三条指令执行完毕。才让别的线程执行。

解决问题:

 

三,线程

 线程的切换

 实现方式一:

缺点:一个进程的其中一个线程阻塞后,该进程的其他线程都无法执行。

实现方式二:

 缺点:内核中的线程太多了

实现三:

多个用户线程对应一个内核线程。

原文地址:https://www.cnblogs.com/inspred/p/10787252.html