zoukankan      html  css  js  c++  java
  • 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()之前使用,否则会报错.

  • 相关阅读:
    编译nginx时openssl报错的解决方案
    编译nginx时make报错[-Werror=implicit-fallthrough=]的解决方案
    centos8下编译安装tomcat
    解决centos安装不上apache:No match for argument: httpd
    编译安装apache
    编译apache出现gcc: error: /usr/lib/rpm/redhat/redhat-hardened-ld: No such file or directory
    配置与管理FTP服务器
    2018icpc南京现场赛-I Magic Potion(最大流)
    Codeforces 1062B Math(质因数分解)
    BZOJ 1009 [HNOI2008]GT考试(矩阵快速幂优化DP+KMP)
  • 原文地址:https://www.cnblogs.com/793564949liu/p/11714567.html
Copyright © 2011-2022 走看看