(day28)操作系统发展史+进程
目录
一、操作系统发展史
(一)穿孔卡片(手工操作)
一个计算机机房只能被一个卡片使用
缺点:CPU利用最低
(二)批处理系统(磁带存储)
1. 联机批处理系统
- 支持多用户去使用一个计算机机房
2. 脱机批处理系统
- 高速磁盘:提高文件的读取速度
- 优点:提高CPU的利用率
(三)多道技术
单道:多个使用CPU时是串行
多道(基于单核情况下):
空间上的复用
一个CPU可以提供给多个用户使用
时间上的复用(读取记忆保存)
切换+保存状态
若CPU遇到IO操作,会立即将当前执行程序CPU使用权断开
优点:CPU的利用率高
若一个程序使用CPU的时间过长,也会立马将当前执行程序使用权断开
缺点:程序的执行降低
并发和并行
并发:看起来像同时在运行,多个程序不停切换+保存状态
并行:真正意义上的同时在运行,在多核(多个CPU)情况下,同时执行多个程序
二、进程
(一)程序和进程
- 程序:一堆代码
- 进程:一堆代码运行的过程
(二)进程调度
1. 先来先服务调度
根据先后顺序
2. 短作业优先调度
根据用时长短
3. 时间片轮转法
cpu执行的时间1s中,加载N个程序,将1秒等分成多个时间片
4. 分级反馈队列
将执行优先分为多层级别
(三)程序调度时的三个状态
就绪态
所有进程创建时都会进入就绪态,准备调度
运行态
调度后的进程进入运行态
阻塞态
凡是遇到IO操作的进程都会进入阻塞态
若IO结束,必须重新进入就绪态
(三)同步和异步
指的时提交任务的方式
同步
若有两个任务需要提交,在提交任务时,必须等待该任务执行结束后才能继续提交并执行第二个任务
异步
若有两个任务提交,在提交第一个任务时,不需要原地等待,立即可以提交并执行第二个任务
(四)阻塞与非阻塞
阻塞
阻塞态,遇到IO一定会阻塞
非阻塞
就绪态和运行态
(五)创建进程的两种方式
- 创建进程方式一
from multiprocessing import Process
import time
# 定义一个任务
def task(name):
print(f'{name}开始执行任务')
time.sleep(1)
print(f'{name}的任务已经结束')
# target = 执行函数的地址,json位元组,传值给target指向的函数
if __name__ == '__main__':
p = Process(target = task,args = ('json',))
# 像操作系统提交创建进程
p.start()
windows
在window系统下,创建子进程,windows会把父进程代码重新加载一次
linux/max
会将当前父进程代码重新拷贝一份,再去执行
- 创建方式2
class MyProcess(Process):
def run(self): # 必须是run
print(f'{name}开始执行任务')
time.sleep(1)
print(f'{name}的任务已经结束')
if if __name__ == '__main__':
p = MyProcess()
p.start()
(六)join方法
告诉操作系统,让子进程结束后再结束父进程
from multiprocessing import Process
import time
# 定义一个任务
def task(name):
print(f'{name}开始执行任务')
time.sleep(1)
print(f'{name}的任务已经结束')
if __name__ == '__main__':
p = Process(target = task,args = ('json',))
p.start() # 告诉操作系统启动子进程
p.join() # 告诉操作系统先结束子进程,再结束父进程
print('主进程')
(七)进程间数据是相互隔离的
主进程和子进程回有各自的名称空间
from multiprocess import Process
x = 100
def func():
global x
x = 200
if __name__ == '__main__':
p = Process(target = func)
p.start()
print(x) # 100
print('主进程')
(八)进程对象的属性
current_process().pid:获取子进程号os.getpid():获取主进程号os.getppid():获取主主进程号p.is_alive():判断子进程是否存活p.terminate():终止子进程cmd中查看进程号:
tasklist|findstr 进程号进程号回收的两种条件
- join,可以回收子进程与主进程
- 主进程正常结束,子进程与主进程也会被回收
from multiprocessing import Process
from multiprocessing import current_process
import os
import time
def task(name):
# 获取子进程号
print(f'{name}开始执行任务',current_process().pid)
time.sleep(1)
print(f'{name}的任务已经结束',current_process().pid)
if __name__ == '__main__':
p = Process(target = task,args = ('json',))
p.start()
p.join()
# 直接告诉操作系统,终止子进程
p.terminate()
time.sleep(0.1) # 主进程进入阻塞态,子进程进入运行态
# 判断子进程是否存活
print(p.is_alive())
# 获取主进程号
print('主进程',os.getpid())
# 获取主主进程号
print('主主进程',os.getppid())
(九)僵尸进程与孤儿进程(了解)
僵尸进程
指的是,子进程已经结束,但是pid号还存在,没有销毁,会占用pid号,占用操作系统资源
孤儿进程
指的是,子进程还在执行,但父进程意外结束
操作系统优化机制:会回收孤儿进程
(十) 守护进程
指的是,主进程结束后,该主进程产生的所有子进程也会跟着结束,并结束
p1.daemon = True :代表是守护进程
面试题
同步和异步,阻塞和非阻塞是同一个概念吗?
答:不是同一个概念,不能混为一谈
最大化提高cpu的使用率:
尽可能减少不需要的IO操作
(day28)操作系统发展史+进程的更多相关文章
- 操作系统发展史 & 进程
今日内容 UDP协议 操作系统发展史 进程 单核情况下的进程调度 进程三状态图 同步异步 阻塞非阻塞 内容详细 一.UDP协议 1.什么是UDP协议 UDP是传输层的协议,功能即为在IP的数据报服务之 ...
- Python3学习之路~9.2 操作系统发展史介绍、进程与线程区别、线程语法、join、守护线程
一 操作系统发展史介绍 参考链接:http://www.cnblogs.com/alex3714/articles/5230609.html 二 进程与线程 进程: 对各种资源管理的集合 就可以称为进 ...
- UDP代码编写、操作系统发展史、多道技术、进程理论与代码层面创建、进程join方法与进程对象方法
昨日内容回顾 socket基本使用 # 内置的模块 import socket s = socket.socket() # 默认是TCP协议 也可以切换为UDP协议 s.bind((ip,port)) ...
- 3、网络并发编程--udp代码、操作系统发展史、多道技术、进程理论
昨日内容回顾 socket基本使用 # 内置的模块 import socket s = socket.socket() # 默认是TCP协议 也可以切换为UDP协议 s.bind((ip,port)) ...
- Python并发编程01 /操作系统发展史、多进程理论
Python并发编程01 /操作系统发展史.多进程理论 目录 Python并发编程01 /操作系统发展史.多进程理论 1. 操作系统 2. 进程理论 1. 操作系统 定义:管理控制协调计算机中硬件与软 ...
- 操作系统:进程管理和IO控制
一.进程管理 进程管理包括进程控制,进程调度,进程同步与通信,死锁控制四个内容. (一)进程控制 进程是操作系统中运行的基本单位,包括程序段,数据段和进程控制段.操作系统通过进程控制块(PCB)管理进 ...
- python 操作系统和进程
一. 操作系统介绍 多道程序系统 多道程序设计技术 所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行.即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种 ...
- 【windows 操作系统】进程控制块(PCB)
转载地址:https://blog.csdn.net/qq_38499859/article/details/80057427一.目录文章目录 操作系统3 ----进程控制块(PCB)详解 ...
- 【windows 操作系统】进程
前言 Windows的内部实现也近似于"一切皆文件"的思想,当然,这一切都只在内核里才有,下载一个WinObj这软件就可以看到,Windows上各种设备.分区.虚拟对象都是挂载到根 ...
随机推荐
- 生产环境轻量级dns服务器dnsmasq搭建文档
dnsmasq搭建文档 一.生产环境域名解析问题 之前生产环境设备较少,是通过维护master(192.168.1.1)设备的hosts文件实现的.每次新增设备后,需要在master的hosts文件中 ...
- Excel自定义格式参数
一.自定义格式 方式一:代码结构组成代码分为四个部分,中间用“:”号分隔,具体如下:正数格式:负数格式:零格式:文本格式 两个代码部分,则第一部分用于正数和零和文本,第二部分用于负数 一个代码部分,则 ...
- 手把手教你用最简便的方法免费安装SSL
原文链接:小枫同学的个人博客 随时IT的发展,它几乎涵盖了世界发展中的任何一方面,几乎都和计算机挂钩,也有好多小伙伴想开一个自己的网站,分享一些知识,分享一些心情等等.但是随着IT的发展,网络安全也越 ...
- selenium--定位--CSS
大家在使用selenium元素定位的时候,通常更多使用的是XPATH,css定位方式用得比较少 但有时候css定位方式还是有一些优势的, 优势1:一般情况下定位速度要比XPATH快 优势2:语法要比X ...
- SpringCloud实现服务间调用(RestTemplate方式)
上一篇文章<SpringCloud搭建注册中心与服务注册>介绍了注册中心的搭建和服务的注册,本文将介绍下服务消费者调用服务提供者的过程. 本文目录 一.服务调用流程二.服务提供者三.服务消 ...
- linux 设置查看文本行数
在一般模式下,即摁下esc按键下的模式: 设置行数为:set nu(此处的冒号需要带上) 取消行号为:set nonu(此处的冒号需要带上)
- 编写shell脚本实现一键创建KVM虚拟机
shell脚本一键创建虚拟机 代码如下: #!/bin/bashname=$1 #把位置变量$1重新定义为name(创建虚拟机的名字)path1=/var/lib/libvirt/images/ #i ...
- C++——多文件结构和编译预处理命令
[toc] 一.多文件结构 1.一个工程可以划分为多个源文件 类声明文件(.h文件) 类实现文件(.cpp文件) 类的使用文件(main函数所在的.cpp文件) 2.利用工程来组合各个文件 //Poi ...
- 同时支持EF+Dapper的混合仓储,助你快速搭建数据访问层
背景 17年开始,公司开始向DotNet Core转型,面对ORM工具的选型,当时围绕Dapper和EF发生了激烈的讨论.项目团队更加关注快速交付,他们主张使用EF这种能快速开发的ORM工具:而在线业 ...
- MySQL-时区导致的时间前后端不一致
背景 今天早上刚上班,就被同事提示,程序的日期处理有问题.数据库里日期为:2019-05-21 11:00:00 而前端显示的日期为:2019-05-21 16:00:00 分析 那肯定是和时区相关了 ...