操作系统简述
1 传输层: tcp: udp: 都会封装端口号. 3306 | {'data':'今天吃了没','from':'QQ'....} 2 网络层: 封装 168.172.0.12|3306|{'data':'今天吃了没','from':'QQ'....} 3 数据链路层: 对数据进行分组,封装mac地址: 源mac地址|目标mac地址|数据类型|168.172.0.12|3306|{'data':'今天吃了没','from':'QQ'....} 4 物理层: 网线 光纤等等物理连接介质 5 6 tcp: 建立连接时三次握手,断开连接是四次挥手 7 udp:pass 8 socket : 网络套接字抽象层 9 10 连接循环的例子: 11 server client 12 import socket import socket 13 server = socket.socket() client = socket.socket() 14 server.bind(('127.0.0.1',8000)) 15 server.listen(6) 16 while 1: 17 conn,addr = server.accept() client.connect(('127.0.0.1',8000)) 18 while 1: while 1: 19 from_client_data = conn.recv(1024) to_server_data = client.send('发消息'.encode('utf-8')) 20 print(from_client_data.decode('utf-8')) from_server_data = client.recv(1024) 21 to_client_data = conn.send('回消息'.encode('utf-8')) print(from_server_data) 22 conn.close() client.close() 23 server.close() 24 25 粘包现象: 26 粘包现象: 只存在于基于tcp协议的socket 27 1,缓存区第一次没有取完,第二次会将剩下的数据recv. 28 2,连续几次发送数据,这些数据会黏在一起发送. 29 30 粘包现象的解决: 31 高大上版:封装一个报头{文件的大小,文件的路径,文件名,MD5等等} 32 strcut模块 33 4个字节| 字典的报头数据| 真实数据 34 基于udp的协议的socket了解为主 35 36 socketserver 37 基于udp的并发 基于tcp协议的并发
02 进程的初识 程序:应用软件,一堆代码文件. 进程:一个正在执行的程序/文件,抽象的概念. 启动一个进程具体过程: 程序存在硬盘,磁盘中,当你双击(触发了)操作系统,操作系统就会将你的程序加载到内存,然后 交于cpu进行处理. 进程的由来 :源于操作系统.
03 操作系统的发展史 一个进程: cpu 去刷碗,炒菜, 来一个任务(活) 先给操作系统,然后有操作系统给了cpu: cpu做这个任务才是一个进程.
1 操作系统: 2 1,定义: 操作系统就一个软件,管理,协调,控制计算机硬件与软件之间的控制软件. 3 2,作用: 4 如果现在没有操作系统,让你完成一个程序: 5 写两层: 6 1, 如何调用控制cpu,硬盘,内存. 7 2, 具体的你的程序的代码. 8 9 a,将一些丑陋的与硬件的接口变成了漂亮的美丽的接口. 10 f = open(三要素) 11 同一时刻多个进程共同去抢占一个cpu资源. 12 b,操作系统要合理的有序的去安排不同的进程的执行顺序问题. 13 14 操作系统与软件的区别: 15 操作系统与用户程序的差异并不在于二者所处的地位。特别地,操作系统是一个大型、复杂、长寿的软件.
1 操作系统的发展史: 2 机械类:算盘. 3 4 电子类的计算机: 5 第一代: 二战期间哈佛大学创建的电子计算机. 6 工作流程:程序员拿着插件板(后期穿孔卡片),预约时间去计算机房研究. 7 8 第一代计算机 没有操作系统概念的. 9 优点:一个程序员可以独享一个计算机. 10 缺点: 11 1,浪费资源,一个计算机只能供一个人使用. 12 2,所有的程序都是串行的.效率很低. 13 14 第二代计算机:分为三个部分,两个机器组成. 15 工作流程: 程序猿按照顺序将字节的穿孔卡片(10个)给了1401 转化成磁带,交由7094机器运行出结果,交由1401打印出结果. 16 优点:批处理,节省了计算机的时间. 17 缺点: 18 1,中间传输还需要人员参与,效率低. 19 2, 所有程序还是串行处理. 20 3,每个人不能独享计算机了,而且你的bug不能及时修复. 21 22 第三代计算机:集成电路,多道程序技术 23 一个程序: IO(input Output) 计算. 24 计算机:既可以处理IO,又可以处理计算. 25 单个cpu: 26 多道技术: 27 炒菜,洗衣服,洗脚: 28 前提:如果这三件事情没有一点IO,全部都是计算, 29 空间上的复用:(内存可以加载很多个不同的任务) 30 31 时间上的复用:(好比cpu处理3个任务炒菜,洗衣服,洗脚) 32 1,遇到进程中的IO时,cpu就切换 33 IO:用户输入input,f.read() 34 2,一个进程长时间被cpu处理时,操作系统就强硬的将cpu调出去处理下一个进程. 35 36 如果每个进程都有不同的IO阻塞, 遇到进程中的IO时,cpu就切换,极大提升了效率. 37 38 炒菜: 10 10 20分钟 39 洗衣服: 10 40 50分钟 40 拖地: 20 5 25分钟 41 42 串行: 95分钟. 43 并发:一个cpu在同一个时刻处理不同的进程,任务. 44 50 分钟. 45 如果每个进程都没有IO阻塞,:一个进程长时间被cpu处理时,操作系统就强硬的将cpu调出去处理下一个进程. 46 为什么这么做? 47 假如有一个任务 不着急但是非常耗时 1 + 2+几千亿. 48 另外两个任务时间短,很着急:
第三代计算机初期还有缺陷:
1,内存级别各种进程间的数据物理隔离.
2,没有达到个人独享的效果. 过了几年:
分时系统.对内存级别的数据进行物理隔离. unix分账户概念,让人们认为自己在独享计算机.
04 概念:串行 并发 并行 阻塞 非阻塞
串行:cpu将一些进程一个接一个的执行.(之前咱们写的代码都是串行.)
并发: 一个cpu执行多个任务,看起来像是同时执行的.
并行:真正意义的一对一服务.
4个cpu 处理4个任务.
4个cpu 处理五个任务.
阻塞:IO成为阻塞.
一个cpu串行执行10个任务,这10个任务前提如果没有IO,执行第一个任务时,下面九个都在等待,这叫阻塞吗?
非阻塞:进程没有IO,就非阻塞.
05 进程的详解
进程与程序的区别.
并发并行.
进程的创建:
如何创建一个进程?
双击qq开启一个进程,运行一个py文件,开启一个进程,我如何开启多个进程.
十个任务,你如何将十个任务开启起来? 你的程序中如何开启多个进程?
他的思路就是我要有一个主(父)进程,在这个代码里面有一个命令,通知操作系统再给我开一个进程,你把代码放进这个进程中,
这样就相当开启了两个进程.
两类系统开启进程的命令不同:
linux(unix,macos):fork
windows:CreateProcess
两类系统开启进程内部方式稍有不同:
linux(unix,macos): 会将主进程的所有数据复制一份,放到进程空间中.
windows:
进程并发的实现: 进程遇到IO阻塞或者长时间运行,操作系统会将你的进程挂起, + 保持原来的状态.
今日总结:
进程
进程与程序的区别.
操作系统发展史
多道技术,
空间,时间的复用.
串行 并发 并行 阻塞 非阻塞
详细的进程:
不同操作系统开不同的进程的区别.
程序要想开启多个进程:一定是在运行一个主进程(文件)时,执行此主进程的某一行开启进程的代码(内部会通知操作系统开始进程.).
06 进程的id 父进程的id