一、冯诺依曼体系
我们先来看一下日常生活中,我们所用的电脑或者公司用的服务器都遵守冯诺依曼体系
由五种组成,分别是输入设备,存储器,运算器,控制器和输出设备
输入单元:鼠标,键盘,扫描仪,写板,网卡,磁盘,话筒等
存储器:也就是物理内存,后续讲进程地址会详细讲
运算器和控制器:都属于CPU,运算器在CPU中会做两件事一是执行算术,二是执行逻辑
输出单元:显示器,网卡,磁盘,音响
输入和输出设备统称为外设,其次CPU并不和外设打交道,同样的外设只和内存打交到
过程:输入单元输入的是数据,数据写入存储器进行处理(运算器和控制器)然后再传出输出设备,因此冯诺依曼规定了硬件层面上的数据流向
那么从冯诺依曼体系的角度来解释一道题:
小明在广东给远在安徽的小红发了一句在吗?那么请问发送了这个“在吗?”信息经过了哪些步骤?
ans:输入在吗?通过输入设备,然后存储到存储器,qq软件运行的时候也跑在存储器上,通过加密运算等过程再写回到存储器然后qq再把数据刷新出去,到输出设备,此时的输出设备叫网卡。通过网络朋友家接收数据的输入设备此时是网卡,不是键盘
然后网卡的数据首先也会贯道内存里,qq在内存中获得消息,经过CPU运算解包再写到存储器里,然后存储器再定时的刷到显示器上,朋友最终收到了消息
二、操作系统概念
操作系统是进行软硬件资源管理的软件,管理硬件
用struct结构体进行描述,用链表或其他高效数据结构进行组织
,操作系统包括以下:
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库,shell程序等)
为什么会有有操作系统?
3. 可以减少用户使用计算机的成本
4. 对下管理好所有的软硬件,对上对用户提供一个稳定高效的运行环境
三、进程
3.1 进程概念
那么什么是进程?
进程 = 你的程序 + 内核申请的数据结构(PCB),程序加载到内存里,操作系统为此创建PCB结构体变量然后里面填上该进程的属性信息最终完成进程创建
举个例子,当我们启动一个google浏览器,或者进行下载等,程序一旦运行就是进程。
进程是资源分配的最小单位,且每个进程拥有独立的地址空间
那么问题来了!!
如果我们开启了几十个进程呢?对于操作系统来说就必须要进行管理
正如上面所提到的我们对于每个进程都遵守先描述再组织的原则,先描述就是为每个进程创建一个进程控制块PCB,进程信息被放在进程控制块的数据结构中,然后一个个的进程由链表或其他高效数据结构进行组织
3.2 描述进程-PCB
那么我们就详细了解一下PCB,可以理解为进程属性的集合,就好像在自然界中我们看到一个动物会通过它的特征进行描述组织从而精准的判断。
在Linux操作系统下的描述进程结构体叫做task_struct
task_struct是linux内核中的一种数据结构,被装在到内存里并且包含着对应进程的信息
- 标示符: 描述本进程的唯一标示符,用来区别其他进程。也就是我们在Linux下看到的PID
我们可以grep一个进程看到
- 状态: 任务状态,退出代码,退出信号等。
- 优先级: 相对于其他进程的优先级。
- 程序计数器: 程序中即将被执行的下一条指令的地址。
- 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
- 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
- I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
- 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等
注意:进程放在CPU上后,不是一直在运行知道进程结束的
一般进程让出CPU有两种情况
- 来了一个优先级更高的进程
- 时间片到了