计算系操作系统基础知识
进程基础知识
程序是什么?
程序就是一堆文件.
进程是什么?
进程就是一个正在执行的文件/程序,抽象的概念.
进程被谁执行?
cpu最终运行你的程序.
操作系统调度作用.将你的磁盘上的程序加载到内存,然后交由CPU去处理.一个cpu正在运行的一个程序,就叫开启了一个进程.
操作系统
操作系统的定义
操作系统是存在于硬件与软件之间,管理,协调,控制软件与硬件的交互.
操作系统的作用:
- 如果没有操作系统,你去写一个程序,你只要完成两层即可.
第一层: 你要学会底层硬件:cpu,内存,磁盘是如何工作使用的.
第二层: 去调用这些底层的硬件.
操作系统第一个作用:将一些丑陋复杂的硬件操作封装成美丽的接口,便于使用.
open()
操作系统的第二个作用:
你的计算机(单个cpu情况)看似可以处理多个进程,看电影 + 玩纸牌游戏 + qq聊天 + 12306抢票.....
操作系统第二个作用: 合理的调度分配多个进程与cpu的关系,让其有序化,
操作系统(计算机)的发展史(多道技术)
计算机: 机械式计算机.算盘.
电子计算机:发展史.
第一代电子计算机(1940~1955)
二战时期,推出的电子计算机 手工操作.预定.类似于插线板的程序,计入机房,一个人独资享有计算机2个小时,各种硬件的操作插线与你的程序结合.
特点: 没有操作系统的概念,所有的硬件连接都是自己完成.
优点: 一个人独享.
缺点:
- 一个人享用浪费资源.
- 所有的程序都是串行处理.
第二代计算机:磁带存储,批处理系统.(1955~1965)
不需要程序员本人继续硬件的操作,所有的硬件的操作都已经是成型的机器了.
每个程序员将自己的程序可在磁盘上.就可以走了.中间有工作人员将你的代码磁盘运行,最后打印结果.
优点: 节省了程序员连接个硬件的操作的时间.
缺点:
- 不能独享计算机,不能在程序运行时修复bug.
- cpu还是串行处理.
第三代计算机,集成电路,多道程序系统.
集成电路概念,所有的硬件变的很小,排列在线路板上.
20世纪60年代初: 计算机两条生产线:互不兼容
用于科学计算,运算的 计算密集型.
用户商用保险银行,归档,打印等工作. IO 密集型.
阻塞; IO阻塞,recv, accept, read input,write, sleep等等,都是阻塞.
system/360系列: 将两种计算机类型合并成一个.
第三代计算机解决一个问题: 人工中途参与磁盘传递工作,以及输入输出设备不同机的问题.
第三代计算机解决第二个问题: 多道技术.
知识点解释:
办一个效率高,效率低的问题.
你洗衣服,20分钟,20分钟,你(cpu)一直没有闲着.cpu处理的效率高(利用率,满负荷),
洗衣服: 10分钟, 40分钟, # 以耗时最长的进程结束为准
聊天 : 20分钟, 10分钟
烧水: 3分钟, 5分钟
如果三个进程全部都没有IO阻塞,多道技术就会影响最终的效率.
多道技术解决的第一个问题: 时间上的复用.
第一代,二代计算机一个内存只允许加载一个进程.
第三代计算机开始,多道技术结局了提高内存的利用率: 空间上的复用.
一个内存可以加载多个进程.
空间上的复用: 当年面临着一个问题,数据隔离.
麻省理工(MIT)在一台改装过的7094机上开发成功的,CTSS兼容分时系统.
一个问题: 还是不能独享
最终第三代计算机推广使用.
进程介绍(理论部分)
介绍几个概念.
串行: 所有的进程由cpu一个一个的解决.
并发:单个cpu,同时执行多个进程(来回切换的),看起来像是同时运行.
并行:多个cpu,真正的同时运行多个进程.
阻塞:遇到IO才叫阻塞.
一个cpu运行两个进程,其中一个进程完全没有阻塞,
非阻塞: 没有IO.
进程的创建.
什么是开启多个进程:
python中,如果一次想开启多个进程,必须是一个主进程,开启多个子进程.
linux, windows: 由主进程开启子进程:
相同点: 原则:主进程开启子进程两个进程都有相互隔离的独立的空间,互不影响.
不同点:
linux: 子进程空间的初始数据完全是从主(父)进程copy一份.
windows: 子进程空间的初始数据完全是从主(父)进程copy一份,但是有所不同.
python并发编程之:多进程
from multiprocessing import Process
import time
def task(name):
print(f'{name} is running')
time.sleep(3)
print(f'{name} is done')
if __name__ == '__main__': # windows环境下,开启多进程一定放在这个下面
p = Process(target=task,args=('怼怼',)) # args 一定是一个元组的形式.
p.start()
# 通知操作系统,你给我在内存中开辟一个空间,将p这个进程放进去,然后让cpu执行.
print('===主进程')
from multiprocessing import Process
import time
class MyProcess(Process):
def __init__(self, name):
super().__init__() # 必须要继承父类的__init__
self.name = name
def run(self): # 必须定义run名字.
print(f'{self.name} is running')
time.sleep(3)
print(f'{self.name} is done')
if __name__ == '__main__': # windows环境下,开启多进程一定放在这个下面
p = MyProcess('怼怼')
p.start()
# 通知操作系统,你给我在内存中开辟一个空间,将p这个进程放进去,然后让cpu执行.
print('===主进程')