(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上各种设备.分区.虚拟对象都是挂载到根 ...
随机推荐
- APP自動化測試腳本2
package com.lemon.day01; import java.net.MalformedURLException; import java.net.URL; import java.uti ...
- Java网络方面
最近在面试 有些概念懂 但是需要梳理一下 借着面试看看自己会多少. 1.网络编程的同步 异步 阻塞 非阻塞? 同步:函数调用在没有得到结果之前,不返回任何结果: 异步:函数调用在没有得到结果之前,不返 ...
- Spring Boot 2.x基础教程:构建RESTful API与单元测试
首先,回顾并详细说明一下在快速入门中使用的@Controller.@RestController.@RequestMapping注解.如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建 ...
- 【Django】中间件,csrf,缓存,信号
中间件(middleware) 描述:Middlewares 是修改 Django request 或者 response 对象的钩子. 在django中,中间件其实就是一个类,在请求到来和结束后,d ...
- 阿里云ECS服务器提示需要修复的漏洞问题
1.漏洞: RHSA-2018:1842: kernel security, bug fix, and enhancement updateRHSA-2018:2299: NetworkManager ...
- 一个随意list引发的惨案(java到底是值传递还是引用 传递?)
前两天写了一个递归,因为太年轻,把一个递归方法需要用到的list定义该递归方法外了,结果开始断点测试的时候有点小问题 ,然后上线之后因为数据量太多导致了一个java.util.ConcurrentMo ...
- Knative 暂时不会捐给任何基金会 | 云原生生态周报 Vol. 22
作者 | 新胜.心贵.进超.元毅.衷源 业界要闻 谷歌:不会向任何基金会捐赠 Knative 自 Knative 项目开始以来,一直存在关于是否将 Knative 捐赠给基金会(例如 CNCF)的疑问 ...
- Android_基于监听的事件处理机制
一.引言 在经过几天的学习之后, 首先熟悉了几大基本布局以及一些常用控件的使用方法,目前正在学习如何实现一个基本的登录注册界面及其功能,而实现功能就需要我们采用事件处理机制来进行调用事件处理方法.以下 ...
- 关于MySQL的经典例题50道
--1.学生表Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表 Course(C,Cname,T) - ...
- ASRWGAN: Wasserstein Generative Adversarial Network for Audio Super Resolution
ASEGAN:WGAN音频超分辨率 这篇文章并不具有权威性,因为没有发表,说不定是外国的某个大学的毕业设计,或者课程结束后的作业.或者实验报告. CS230: Deep Learning, Sprin ...