操作系统的进程

何为操作系统:

冯诺依曼体系结构 : 描述了一台计算机是如何构成的. (99%的计算机都是冯诺依曼结构) => 硬件的特点会对软件开发造成直接影响

冯诺西曼体系结构是由冯诺依曼提出的,他也被称为计算机领域的祖师爷(计算机之父),他本来是个数学家,也是个物理学家,也是个化学家,还参与过曼哈顿计划.
冯诺依曼在火车上遇到了一个普林斯顿大学的研究员,当时这个研究员正在研究用来计算弹道导弹轨迹的机器,可是遇到了难题,于是冯诺依曼说可以让他去看看,他就去了,就为冯诺依曼体系奠定了基础

图灵 奠定了计算机工作原理的理论基础


1. 冯诺依曼体系结构描述了一台计算机应该是包括这几部分:

  1. CPU中央处理器(计算机的大脑),进行算术运算和逻辑判断

过去几十年,CPU的发展速度是非常迅猛的,这也验证了"摩尔定律":18个月,芯片集成程度提高一倍,成本降低一半(指数提升)
这个摩尔是Intel的副总裁,联合创始人之一)

但是最近几年摩尔定律失效,因为CPU集成程度更高,就需要让单个元件尽量小,现在最强的是7nm级别,这样的空间尺度上,经典物理学已经接近失效,主要靠量子力学,在解决这个问题的办法是人海战术,一个CPU不能更快了就多搞几个CPU,多核CPU

    GPU是一种特殊的CPU,专门针对一些特定的场景进行优化运算(矩阵运算)
  1. 存储器 一般分成两类
    1. 内存
      写的代码主要都是在内存中,new出来的对象就是在内存上申请空间
    2. 外存(磁盘)
      内存和外存的对比:
      1. 内存的存储空间较小,外存的存储空间较小
      2. 内存的访问速度较快(ns级别 纳秒 ),外存的访问速度较慢(us 微秒),大概查了三四个数量级
      3. 内存的成本较高,外存的成本较低
      4. 内存如果断点了,数据就丢失了,而外存如果断电了,数据不丢失 (外存支持持久化)
  2. 输入设备
    键盘/鼠标/摄像头/麦克风… 和内存打交道
  3. 输出设备
    显示器/打印机/音响…
    有些设备算输入设备也是输出设备 (触摸屏)

2. 操作系统

操作系统内核是一个软件. 搞管理的软件.一方面是管理计算机的硬件设备. 另一方面管理计算机的软件资源

一个完整的操作系统 = 内核 + 配套的应用程序

  • 在屏幕中输出"HelloWorld"
    代码真正执行起来的时候,println会进入到依赖库的代码中
    本质上需要操作显示器这个硬件设备来完成
    println就会通过响应的系统调用进入到内核中来执行代码
    这个内核中的代码再执行"让显示器输出"这样的动作
    内核调用显卡驱动程序,由驱动程序由驱动程序来具体操作显示器
    每一个硬件都有对应的驱动程序

那么操作系统具体如何管理的呢?

管理的核心工作是两件事:

  1. 描述 相当于知道有什么
  2. 组织 然后要做什么

3. 进程(Process)

进程是一种操作系统中非常重要的软件资源.
把一个可执行程序跑起来.系统中就会创建一个对应的进程.
如果这个程序执行结束了,系统就会随之销毁对应的进程.
进程就可以看成是一个程序的执行"活动"
系统进行资源分配和调度的基本单位

区分程序(可执行文件)和进程

.exe就是可执行文件 就是一个磁盘上的文件,静态的,如果不使用,就不会发生变化

任务管理器中的QQ,就是一个进程,当双击exe文件时,操作系统就会加载这个可执行文件,把exe文件中的很多内容都加载到内存中了,分配一些资源,并开始执行这个可执行程序包含的指令. (分配资源并执行的过程就是进程)
进程也可以认为是操作系统进行资源分配的最小单位.
PID
PID 就是进程id 也就是进程的身份标识符
先双击QQ,得到一个进程id p1
关闭QQ,再次打开,又得到一个进程id p2

进程管理(重点,难点)

以Linux为例
描述:内核中使用一个task_struct / PCB (进程控制块) 结构体来描述进程 (C语言)

每创建一个进程,就同时创建一个PCB这样的类的实例.
组织:使用双向链表把所有的PCB对象串到一起

管理的核心工作是两件事:

  1. 描述 相当于知道有什么
  2. 组织 然后要做什么

双击一个exe,创建一个进程的时候,本质上就是在内核中,先创建了一个PCB对象然后把这个对象加入到链表中

关闭一个程序,结束一个进程的时候,本质上就是在内核中找到这个对应的PCB对象,然后从链表上删掉,并且释放掉该对象

通过任务管理器查看到的所有的进程信息,本质上就是在遍历内核中的这个链表,一次读取对应PCB中的节点信息

PCB里面包含哪些信息呢?
  1. pid(进程id) 进程的身份标识.

  2. 一组内存指针,指向该进程持有的一些重要数据在内存中(系统给该进程分配的资源的一部分)的位置.

    重要数据:

    1. 执行的指令都有啥
    2. 这些指令依赖的数据是啥
  3. 状态
    相当于一张日程表,为了区分当前的进程是正在执行还是等待执行

    一个进程的状态有这些状态:
    R:就绪状态.正在CPU上执行,或者即将执行
    S:睡眠状态,这些进程没法再CPU上执行,而是在等待.
    D:深度睡眠状态.进程在长时间的忙于IO操作,没精力理会CPU
    X:退出状态.进程已经被销毁了

  4. 优先级
    根据系统的情况,分优先级执行进程

  5. 进程的记账信息
    记录做了什么,不要让某个进程一直霸占CPU,差不多就行了

  6. 进程的上下文
    进程上下文实际上是进程执行活动全过程的静态描述,提前规划好做什么

3-6 是为了实现"进程调度",如果资源非常充裕,那么不需要调度,事实是资源不那么充足

进程多,但是资源少,最紧张的资源是CPU(同一时刻,一个CPU上只能执行一个程序的指令)

例如:
我的电脑8核,但是当前进程数已经上百了
如何让这么多进程在8个CPU上很好地工作?
这就靠"进程调度"来完成
目的就是为了让这么多进程能够很好地在有限的CPU上很好地运行

操作系统中实现进程调度的模块叫做"调度器",实现具体调度的时候有很多策略
这些策略都要依赖PCB中对应的属性

"并发式"执行

由于CPU执行指令极快,我们可让CPU先执行进程1的指令,工作一小会儿之后执行进程2的指令,然后…然后再执行进程1的指令

从宏观上来看,我们可以边看视频,边聊QQ,还能边放歌,看起来是同时发生的
但其实从微观上来看,这些进程的指令是串行执行的,只不过是CPU切换速度极快,在宏观上感知不到

这样的过程就叫做并发↑

“并行”

宏观上是同时执行,微观上也是同时执行(两个CPU就可以同时执行两个进程的指令)

补充

时间片:只进行某进程的时间

抢占式调度:操作系统的调度器会非常频繁的进行行程切换,哪怕那个进程只进行了一半,也是随时可能被打断的.

内核态:代码在内核态上执行,例如一些操作硬件的代码 (为了安全性)

用户态:

内核态的权限比用户态的权限高很多.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值