Python3并发编程篇之操作系统基本知识

参考源

以下知识总结于老男孩 and 路飞学城讲师博客园博文:

为什么要操作系统

我们让计算机帮我们去执行任务,那么计算机怎么执行呢?当然是使用硬件啦。
那么对于大部分程序员来说无法了解所有操作硬件的细节,管理以及优化使用硬件
是非常繁琐的过程,这些繁琐的过程就是操作系统来完成的。
那么有了它,程序员就能从繁琐的工作中解脱出来,专心于应用软件的编写即可,
应用软件则调用操作系统提供的功能接口来间接使用硬件。

什么是操作系统

操作系统就是一个协调管理以及控制计算机硬软件资源的控制程序。

操作系统的组成

操作系统位于计算机硬件和应用软件之间,本质上也就是一个软件
操作系统由两部分组成:

  1. 内核
    内核运行于内核态,用于管理计算机硬件资源。
  2. 系统调用
    系统调用运行于用户态,给应用软件开发者的应用软件程序提供系统调用接口,来间接地操作计算机硬件。

操作系统的功能

  1. 封装了复杂的计算机硬件接口,提供了良好的系统调用接口。
  2. 将应用软件对硬件资源的竞争请求变得有序化。

操作系统发展史

1946年2月14日第一台计算机没有操作系统,交互的方式为:穿孔卡片

批处理操作系统

批处理操作系统又分为:

  • 联机批处理
  • 脱机批处理

多道程序系统

允许多个程序在内存中运行

多道程序系统的出现让OS的发展渐趋成熟

提供了

  • 作业调度管理
  • 处理机管理
  • 存储器管理
  • 外设管理
  • 文件系统管理

产生的背景

CPU在执行一个任务的过程中,若需要操作硬盘,则发送操作硬盘的指令,指令一旦发出,硬盘上的机械手臂滑动读取数据到内存中,这一段时间,CPU需要等待,时间可能很短,但对于CPU来说已经很长很长,长到可以让CPU做很多其他的任务,如果我们让CPU在这段时间内切换到去做其他的任务,这样CPU不就充分利用了吗。这正是多道基数产生的技术背景。

在单核下,实现并发
并发:看起来像是同时运行的

多道技术

多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如CPU)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。

  1. 空间复用:
    将内存划分为好几个部分,每个程序对应一个部分,
    每个程序拥有独立空间,这样就让数据变得更加稳定和安全
  2. 时空复用:
    • 遇到IO切,这种情况下会提供效率
    • 长时间占用CPU也切,这种情况反而会降低效率
  3. 硬件支持隔离

多道技术的核心

在切之前要保存当前进程的运行状态,这样就能保证
下次切回来时,基于上次切走的位置继续运行。

说明

ps:
现在的主机一般是多核,那么每个核都会利用多道技术
有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个
cpu中的任意一个,具体由操作系统调度算法决定。

多道批处理操作系统

分时操作系统

实时操作系统

通用操作系统

一般操作系统有三种类型,多道批处理操作系统、分时操作系统、实时操作系统
那么通用操作系统为拥有以上几种的操作系统

什么是I/O

I/O操作,就是让CPU等待的操作

什么是程序

存放在外设上静态的二进制文件

什么是进程

就是在运行中的程序,进程是OS分配资源的最小单位

操作系统对进程的调度算法

  1. 先来先服务算法 (FCFS)
  2. 短作业算法
  3. 时间分片算法
  4. 多级反馈算法

什么是守护进程

主要功能就是为本地或远程用户提供服务,
每个服务程序都是由运行在后台(内存)的守护进程执行的,
守护进程在开机的时候就已经启动了,并且时刻监听前台的客户服务请求,
一旦客户发出了请求,守护进程便为他们提供服务。
也就是一个服务程序对应着一个守护进程,守护进程是服务的展现方式。

特殊的守护进程

系统初始化进程
其PID为1,是其他守护进程的父进程,也就是系统上所有的守护进程都是通过系统初始化进程来管理的。

什么是僵尸进程

每个子进程运行结束后,都有一个短暂的僵尸状态,子进程大部分资源已被释放,
还保存一些状态信息,以便让父进程知晓子进程状态,方便回收子进程,
但是如果父进程一直运行着,不结束的话,那么子进程的状态就会一直保留着,
久而久之就会降低程序运行效率。----(有害)

什么是孤儿进程

父进程结束了,而子进程还在运行。这时,子进程都由PID为1的系统初始化进程管理,
系统初始化进程逐个结束子进程的生命周期。-----(无害)

并发

雨露均沾,从宏观上看,在一个时间片段,可以看出有多个程序在同时运行(单核)

并行

同时执行,从微观上看,在一个精确的时间片刻,有多个程序在同时运行(多核)

程序的分类

  • 计算密集型
  • I/O密集型

同步与异步

同步与异步针对的是函数/任务的调用方式

同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。
而异步情况下是当一个进程发起一个函数(任务)调用的时候,不会等函数返回,而是继续往下执行当,
函数返回的时候通过状态、通知、事件等方式通知进程任务完成。

阻塞与非阻塞

阻塞与非阻塞针对的是进程或线程

阻塞是当程序中某个操作请求不能满足的时候,那么进程就会被挂起,
也就被剥夺了CPU的执行权限,当阻塞结束后,进程不会立即执行,
操作系统会根据进程的调度算法,将进程分配到某个核上继续执行。
而非阻塞就是当操作请求不能满足时,不会阻塞当前进程,也就没有被剥夺CPU的执行权限,
继续执行以下的代码。

阻塞与同步,非阻塞与异步之间没有太多关联

例如:程序同步提交一个计算密集型任务,那么就会等任务执行完毕,但此时并没有遇到IO阻塞
因为遇到IO阻塞,就会被剥夺走CPU的执行权限,但是此时计算型任务正在CPU上运行。

程序的运行状态

程序运行过程中,会进入一下几种状态:

  1. 就绪 (Ready)分配到了除CPU以外的所有必须资源,等待操作系统调度开始运行
  2. 运行 (Running)获得到了CPU的资源,正在处理
  3. 阻塞 (Blocked)由于等待某个事件发生,而放弃CPU处于阻塞状态

当一个程序运行的时候,比如Python程序。Run的时候,不是直接执行的
而是处于Ready阶段,等待操作系统调度开始运行
再处于程序运行阶段,
当碰到阻塞事件(Input等),程序会处于阻塞阶段。
当解除这个状态后,程序不是立马执行,而是处于Ready就绪阶段,等待操作系统的调度继续执行

进程的创建

新的进程创建都是由一个进程执行了一个创建进程的调度而创建的

进程的结束

  正常退出,自愿,例如:程序运行完毕
  错误退出,自愿,例如:python3 test.py 找不到这个文件
  严重错误退出,非自愿,例如:程序发生异常
  被其他进程杀死,非自愿,例如:kill
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值