10.21 操作系统发展史,进程

操作系统发展史

穿孔卡片

一个计算机机房,一次只能一个用户使用.
CPU利用率低

联机处理系统

支持多个用户去使用一个计算机机房

脱机批量处理

高速磁盘

提高文件的读取速度

优点

提高CPU利用率

多道技术(基于单核情况下研究)

多道

空间上的复用(*****)

一个CPU可以提供给多个用户使用

时间上的复用(*****)

切换+保存状态

优点

若CPU遇见IO操作,会立即将当前程序的CPU使用权断开(会让CPU的利用率提高)

缺点

若一个程序使用CPU的时间过长,会立即将当前执行的程序的CPU使用权断开(会让程序的利用率降低)

单道

多个用户使用CPU时是串联运行的
必须让上一个程序运行完,才能运行下一个程序

并发与并行

并发

指的是看起来像同时在运行,多个程序不停切换+保存状态

并行

真实意义上的同时运行, 在多核的情况下,同时执行多个程序

进程

程序与进程

程序:一堆代码
进程:一堆代码运行的过程

进程调度

  1. 先来先服务调度
    缺点:程序A先使用,程序B必须等待程序A使用CPU结束后才能使用
  2. 短作业优先调度
    缺点:若程序A使用时间最长,有N个程序使用时间短,必须等待所有用时短的程序结束后才能使用
  3. 时间片轮转法
    CPU执行的时间1秒钟,加载N个程序,要1秒平均分成N个时间片
  4. 分级反馈队列
    将执行优先分为多层级别
    1级:优先级最高
    2级:优先级第二
    3级:类推
    ……

程序调度时的三种状态

就绪态:所有进程创建时都会进入就绪态,准备调度
阻塞态:凡是遇到IO操作的进入阻塞态,IO操作结束,必须重新进入就绪态
运行态:调度后的进程,进入运行态

同步与异步

指的是提交任务的方式

同步

若有两个任务需要提交,在提交第一个任务时,必须等待该任务执行结束后,才能继续提交并执行第二个任务

异步

指的是,若有两个任务提交,在提交第一任务时不需要原地等待,立即可以提交并执行第二个任务

阻塞与非阻塞

阻塞

阻塞态,遇见IO一定会阻塞

非阻塞

就绪态和运行态

面试题:同步与异步,阻塞与非阻塞是同一个东西吗?

不是同一个概念,同步与异步准备期的,阻塞和非阻塞是建设期的

创建进程的两种方式

  1. 定义一个任务
    windows:创建子进程,windows会将当前父进程代码重新加载执行一次
    linux/mac:会将当前父进程代码重新拷贝一份,在去执行
from multiprocessing import Process
import time
def task():
	print('子进程开始执行')
	time.sleep(1)
	print('子进程结束完毕')
#必须在`__main__`下执行
if __name__ == '__main__':
	#target=执行任务(函数地址)
	p = Process(target=task)
	#告诉操作系统,创建子程序
	p.start()
	#join:让主程序等待所有的子程序结束后才能结束
	p.join()
	print('主程序')
  1. 自定义一个类,并继承Process
from multiprocessing import Process
import time
class MyProcess(Process):
	def run(self):
		#此处是子进程的任务
		print('子进程开始')
		time.sleep(1)
		print('子进程结束')
if __name__ == '__main__':
	p = MyProcess()
	p.start() #告诉操作系统,创建子进程
	#join
	p.join() #让主进程等待所有子进程结束后才能结束
	print('主进程')

join

告诉操作系统,让子进程结束后,父进程在结束

进程间数据相互隔离

主进程与子进程会产生各自的名称空间,让数据相互隔离

进程对象的属性

current_process.pid获取子进程pid号
os.getpid()获取主进程pid号
os.getppid()获取主主进程pid号
cmd中查看进程号:tasklist|findstr进程号
pterminate()终止子进程
is_alive判断进程是否存活

进程号回收的两种条件

  1. join.可以回收子进程与主进程
  2. 主进程正常结束,子进程与主进程也会被回收

僵尸进程与孤儿进程

僵尸进程

指的是进程已经结束,但PID号还存在,未被销毁
缺点:占用PID号,占用操作系统资源

孤儿进程

指的是进程还在执行,但父进程意外结束
操作系统优化机制:提供一个类似于福利院的机制,帮你回收没有父进程的子进程

守护进程

指的是主进程结束后,该主进程产生的所有子进程跟着结束,并回收
守护进程:p.daemon = True
注意:必须在p.start()之前使用,否则会报错.

原文地址:https://www.cnblogs.com/793564949liu/p/11714567.html