文章目录
1. 冯诺依曼体系结构
现代的计算机,大多数都是遵守冯诺依曼体系结构的
冯诺依曼体系结构 主要由 五大部件 组成:
- 存储器: 用来存放数据和程序
- 运算器: 主要运行算数运算和逻辑运算,并将中间结果暂存到运算器中
- 控制器: 主要用来控制和指挥程序和数据的输入运行,以及处理运算结果
- 输入设备: 用来将人们熟悉的信息形式转换为机器能够识别的信息形式,常见的有键盘,鼠标等
- 输出设备: 可以将机器运算结果转换为人们熟悉的信息形式,如打印机输出,显示器输出等
注:
- 运算器 和 控制器 合为 中央处理器(CPU)
- 中央处理器 : 是进行算术运算和逻辑判断
- 存储器 分为 内存 和 外存
- 输入设备 和 输出设备 合为 I/0设备
- 针对于 存储空间 : 磁盘 > 内存 >> CPU
- 针对于 数据访问速度 : CPU >> 内存 > 磁盘
2. 操作系统
操作系统 (Operating System) 简称 OS.
操作系统是一组做计算机资源管理的软件的统称。
目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等
OS分类
- 管理者的任务种类分两种:硬件管理,软件管理
- 按照目标对象分两种:一种对内的管理,一种对外业务进行管理
3. 进程
3.1 进程的概念
进程(process) 也叫做 任务(task).对于操作系统来说 一个任务就是一个进程
进程 就是一个"正在运行"的程序,换言之,可以把进程看做程序的一次运行过程;
同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
要想让进程跑起来,就得给这个进程分配一定的系统的硬件资源:
CPU,内存,磁盘,网络宽带,...
3.2 进程在系统中是如何被管理的
**
管理 = 描述(PCB) + 组织
**
- 描述 : 进程控制块(PCB)
- 组织: 使用一定的数据结构来组织.常使用双向链表实现.
查看进程列表: 本质上就是遍历操作系统内核中的这个链表,并显示其中的属性.
创建一个进程: 本质上就是创建一个PCB对象,后加入到内核的链表中
销毁一个进程: 本质上就是删除内核链表中的这个PCB对象.
3.3 进程控制块
进程控制块(PCB Process Control Block) ,我们可以把进程控制块看作 一个类 或 C语言的结构体.
一个PCB对象就对应一个进程
PCB中有哪些属性?
- pid : 一个进程的身份标识.一个机器同一个时刻不会存在2个pid相同的进程.
- 内存指针 : 描述了这个进程使用的内存空间是哪个范围(虚拟地址空间)
- 文件描述符表 : 描述了这个进程都打开了哪些文件.
- 进程调度信息(进程的状态,进程的优先级,进程的上下文,进程的记账信息)
3.4 操作系统的并发和并行式执行
例子:
现有一个有钱的,但是长得丑的男 A,一个没钱的,但是长得帅的男 B, 以及一个没钱的长得丑,但是会舔的男 C.
要想同时和 A B C 三个人一起交往该如何实现?
今天和A一起吃饭逛街
明天和B一起看电影
后天和C一起去上课
…
只要安排的合理 A B C 就不知道互相的存在.
从宏观上来看(以一年为单位): 同时与3个人进行交往
从微观上来看(以一天为单位): 同一时间只与一个人交往
3.4.1 并发式执行
由于CPU的运行速度非常快,虽然CPU在进行切换,但是用户却看不见这切换的过程.从宏观上来看是同时进行的,从微观上来看是交换进行的.
3.4.2 并行式执行
因为多核CPU可以同时执行多个程序,如 8核CPU 可以 同时执行8个程序.
CPU1执行了 进程1
CPU2执行了 进程2
进程1 和 进程2 不论从宏观上来看还是从微观上来看都是同时执行的
3.5 进程的状态
- 创建状态: 进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。
- 就绪状态: 进程处于可运行的状态,只是CPU时间片还没有轮转到该进程,则该进程处于就绪状态。
- 运行状态: 进程处于可运行的状态,且CPU时间片轮转到该进程,该进程正-在执行代码,则该进程处于运行状态。
- 阻塞状态: 进程不具备运行条件,正在等待某个事件的完成
- 终止状态: 进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行.
3.6 进程的优先级
进程的优先级 就是 安排时间表的时候,优先给谁安排
例如 现有12块时间.
最喜欢 B ,就给 B 分配了 7块时间
其次最喜欢 C , 就给 C 分配了 4块时间
最不喜欢 A ,就给 A 分配了 1块时间
这样就优先给 B 其次是 C 最后是 A
3.7 进程的上下文
进程的上下文 : 简单说来就是一个环境,进程在时间片轮转切换时,由于每个进程运行环境不同,就涉及到转换前后的上下文环境的切换,就是一个进程在执行的时候, CPU的所有寄存器中的值、进程的状态以及堆栈上的内容。切换时需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。
3.8 进程的记账信息
记录当前这个进程在CPU上执行了多久了,用来辅助决定这个进程是继续在CPU上执行,还是说要调度出去.
3.9 内核态与用户态
一般的操作系统(如Windows、 Linux)对执行权限进行分级:用户态和内核态。
- 操作系统内核作为直接控制硬件设备的底层软件,权限最高,称为内核态,或核心态。
- 用户程序的权限最低,称为用户态。
例如 : 张三去银行办理业务,首先需要去填表(个人信息),这就是用户态
填好表后,交给银行的工作人员,让工作人员帮你办理业务,这就是内核态.
3.10 进程的虚拟地址空间
为啥要搞一个"虚拟地址空间"
为啥不让进程直接访问真实的物理地址?
为了一定程度减少内存访问越界带来的后果.
例如进程1 的内存范围是 0x100~0x400 ,此时如果尝试修改0x401的地址数据,这个操作就是越界访问.
在真实的物理地址的情况下,如果修改了 0x401 ,这个地址可能是进程2的,此时进程2就可能出bug了.
在虚拟地址的情况下,如果修改了 0x401 ,此时进行 0x401 的页表查询,由于0x401是非法地址,就查找不到, 于是就让 这个进程崩溃,防止影响其他的进程.
这样就让进程和进程之间相互影响的可能性变小了,隔离性增加了,进程也更稳定了.缺点就是两个进程需要相互配合的时候,沟通起来就麻烦了.
版权归原作者 wwzzzzzzzzzzzzz 所有, 如有侵权,请联系我们删除。