操作系统发展史,UDP协议,进程,阻塞与非阻塞,同步与异步
- 操作系统的发展史
- 发展历程
- 三大核心硬件
- UDP协议
- 多道技术
- 单道技术
- 多道技术
- 多道技术(切换和保存状态)
- 进程的概念
- 如何了解进程
- 进程的调度算法
- 时间片轮转法+多级反馈队列
- 进程的并行与并发
- 进程的三状态(就绪态,运行态,阻塞态)
- 阻塞与非阻塞
- 同步异步与阻塞非阻塞
操作系统的发展史
发展历程:
1.穿孔卡片 总结: |
三大核心硬件
CPU | 是计算机中真正干活的人 |
内存 | 给CPU准备需要运行的代码 |
硬盘 | 永存存储将来可能要被运行的代码 |
强调:CPU是整个计算机执行效率的核心
UDP协议
# 服务端
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8080))
msg, address = server.recvfrom(1024)
print('msg>>>:%s' % msg.decode('utf8'))
print('address>>>:',address)
server.sendto('我是服务端 你好啊'.encode('utf8'), address)
# 客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_address = ('127.0.0.1', 8080)
client.sendto('我是客户端 想我了没'.encode('utf8'), server_address)
msg, address = client.recvfrom(1024)
print('msg>>>:%s' % msg.decode('utf8'))
print('address>>>:',address)
'''补充说明'''
1.服务端不需要考虑客户端是否异常退出
2.UDP不存在黏包问题(UDP多用于短消息的交互)
多道技术(前提:一个核/一个CPU/一个真正干活的)
单道技术:
可以理解为线性,每个步骤一直走到底。
多道技术
我们在进行程序与性的时候在接收程序A之后不是有一段空闲的时间嘛,我们让这段时间也不要空着,让他去接收程序B,以此类推
总结:
多道技术比单道技术省时,而且大大提高了cpu的利用率
多道技术优化:(切换+保存状态)
1.切换
1.当cpu在遇到IO操作的时候程序会有停止,我们也不能让cpu浪费这段时间,遇到IO操作可以让cpu去执行其他任务,等到IO操作结束后cpu再回来执行
2.在我们长时间浏览同一个页面或其他时,会产生一个缓存,能让这个页面保留住,此时cpu就可以去执行其他任务了
CPU在两种下会切换(去执行其他程序) 1.程序自身进入IO操作 IO操作:输入输出操作 获取用户输入 time.sleep() 读取文件 保存文件 2.程序长时间占用CPU |
2.保存状态
每次切换之前要记录下当前执行的状态 之后切回来基于当前状态继续执行
进程的概念
1.如何理解进程:
程序:一堆躺在文件上的死代码(死的)
进程:正在被运行的程序(活的)
2.进程的调度算法
先来先服务算法 | 针对耗时比较短的程序不友好 |
短作业优先调度 | 针对耗时比较长的程序不友好 |
时间片轮转法+多级反馈队列 | 将固定的时间均分成很多份 所有的程序来了都公平的分一份 分配多次之后如果还有程序需要运行 则将其分到下一层 越往下表示程序总耗时越长 每次分的时间片越多 但是优先级越低 |
时间片轮转法+多级反馈队列:
举个例子:程序A和程序B同时执行,A有1gb,B有0.5gb,第一层cpu会给他们分配一样的例如5s的时间,5s结束,A执行完了而B没有,A结束,那么B会在进入到下一层并且会再次给更多的时间例如10s,如果此时有C程序要加进来,那么B程序要回到第一层和C程序一起重新分配时间 |
进程的并行与并发
并行与并发:
并行 | 多个进程同时进行(必须要有多个CPU) |
并发 | 多个进程看上去像同时执行就可以称之为并发(单个CPU完全可以实现并发的效果 如果是并行那么肯定也属于并发) |
进程的三状态(就绪态,运行态,阻塞态)
就绪态 | 当进程已分配到除CPU以外的所有必要的资源的进程状态称为就绪状态 |
运行态 | 程序正在处理机上执行的进程状态称为执行状态 |
阻塞态 |
正在执行的程序遇到了IO操作或者其他终止操作的进程状态称为阻塞态 当阻塞态完成了IO操作或其它操作会回到就绪态 |
1.所有的进程要想被运行 必须先经过就绪态 2.运行过程中如果出现了IO操作 则进入阻塞态 3.运行过程中如果时间片用完 则继续进入就绪态 4.阻塞态要想进入运行态必须先经过就绪态 |
用于描述进程的执行状态
阻塞
阻塞态
非阻塞
就绪态 运行态
同步 | 多个任务存在时,一个任务想要执行必须等上一个任务执行完毕 |
异步 | 不管上一个任务有没有完成,下一个任务都可以立即执行 |
同步异步阻塞非阻塞结合
同步阻塞 | 在银行排队 并且在队伍中什么事情都不做 |
同步非阻塞 | 在银行排队 并且在队伍中做点其他事 |
异步阻塞 | 取号 在旁边座位上等着叫号 期间不做事 |
异步非阻塞 | 取号 在旁边座位上等着叫号 期间为所欲为 |
总结:
异步非阻塞是最理想的方式,同步阻塞是最费时费资源的方式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用