9.1 进程基础知识
程序是什么? -- 程序就是一堆文件.
进程是什么? -- 进程就是一个正在执行的文件/程序. 是资源单位 ( 抽象的概念 )
进程被谁执行? -- CPU最终运行程序 .
操作系统调度作用,将磁盘上的程序加载到内存,然后交由CPU去处理.一个CPU正在运行的一个程序,就叫开启了一个进程
9.1.1 操作系统
操作系统的定义
操作系统是存在于硬件与软件之间,管理,协调,控制软件与硬件的交互.
操作系统的作用(面试会问)
- 将一些复杂的硬件操作封装成接口,便于使用.
- 合理的调度分配多个进程与CPU的关系让其有序化
如果没有操作系统,你去写一个程序,你只要完成两层即可.
- 第一层: 你要学会底层硬件:cpu,内存,磁盘是如何工作使用的.
- 第二层: 去调用这些底层的硬件.
9.1.2 操作系统的发展史(多道技术)
计算机:机械式计算机(算盘)
电子计算机:发展史
第一代计算机:1940-1955
二战时期:推出电子计算机,手工操作,预约,类似于插线板的程序,进入机房,一个人使用.各种硬件的操作插线与你的程序结合.
特点:没有操作系统的概念,所有的硬件连接都是自己完成
优点:一个人使用
缺点:一个人使用浪费资源 , 所有的程序都是串行处理
第二代电子计算机:磁带存储--批处理系统 1955-1965
不需要程序员本人继续硬件的操作,所有的硬件的操作都已经是成型的机器
每个程序员将自己的程序刻在磁盘上,就可以走了,中间有工作人员将你的代码磁盘运行,最后打印结果.
优点:节省了程序员连接各个硬件的操作的时间
缺点:不能独自使用计算机,不能在程序运行时修复bug.CPU还是串行处理
第三代计算机,集成电路,多道程序系统.
集成电路概念,所有的硬件变的很小,排列在线路板上.
20世纪60年代初: 计算机两条生产线:互不兼容
用于科学计算,运算的 计算密集型.
用户商用保险银行,归档,打印等工作. IO 密集型.
阻塞; IO阻塞,recv, accept, read input,write, sleep等等,都是阻塞.
system/360系列: 将两种计算机类型合并成一个.
第三代计算机解决的两个问题:
人工中途参与磁盘传递工作,以及输入输出设备不同机的问题
多道技术
多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如CPU)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。
# 多道技术产生的技术背景 CPU在执行一个任务的过程中,若需要操作硬盘,则发送操作硬盘的指令,指令一旦发出,硬盘上的机械手臂滑动读取数据到内存中,这一段时间,CPU需要等待,时间可能很短,但对于CPU来说已经很长很长,长到可以让CPU做很多其他的任务,如果我们让CPU在这段时间内切换到去做其他的任务,这样CPU不就充分利用了吗。
多道技术解决的两个问题:
时间上的复用:
当一个程序在等待I/O时,另一个程序可以使用CPU,如果内存中可以同时存放足够多的作业,则CPU的利用率可以接近100%,类似于我们小学数学所学的统筹方法 ( 操作系统采用了多道技术后,可以控制进程的切换,或者说进程之间去争抢CPU的执行权限。这种切换不仅会在一个进程遇到 IO 时进行,一个进程占用CPU时间过长也会切换,或者说被操作系统夺走CPU的执行权限)
空间上的复用
第一代,二代计算机一个内存只允许加载一个进程.
第三代计算机开始,多道技术解决了提高内存的利用率:空间上的复用 -- 一个内存可以加载多个进程
空间上的复用: 当年面临着一个问题,数据隔离.
麻省理工(MIT)在一台改装过的7094机上开发成功的,CTSS兼容分时系统.
一个问题: 还是不能独享
9.1.3 进程介绍
进程与程序的区别
程序就是一堆文件.
进程就是一个正在执行的文件/程序
几个概念:(面试会问)
串行:所有的进程由CPU一个一个的解决
并发:单个CPU同时执行多个进程(来回切换),看起来像同时运行
并行:多个CPU真正同时运行多个进程
阻塞:遇到 IO 才叫阻塞
非阻塞: 没有 IO
进程的创建
什么是开启多个进程? -- socket: server , client 两个进程
Python中如果想一次开启多个进程,必须是一个主进程,开启多个子进程
开启进程经历的过程:内存中开辟一个空间,加载资源与数据,调用CPU执行,可能还会使用这个空间的资源
Linux , Windows: 由主进程开启子进程
相同点:原则:主进程开启子进程,两个进程都有相互隔离的独立的空间,互不影响
不同点:
Linux: 子进程空间的初始数据完全是从主(父)进程copy一份.
Windows: 子进程空间的初始数据完全是从主(父)进程copy一份,但是有所不同.