大家好,欢迎来到IT知识分享网。
文章目录
一、冯诺依曼体系
约翰·冯·诺依曼,可以说是计算机的祖师爷。被后人成为“现代计算机之父”
它提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。
- CPU 中央处理器: 进行算术运算和逻辑判断.
- 存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
- 输入设备:用户给计算机发号施令的设备.
- 输出设备: 计算机个用户汇报结果的设备
如果对于存储空间
磁盘 > 内存 > CPU
如果对于访问速度
CPU > 内存 > 磁盘
二、CPU的基本工作流程
接下来,我们用一个从无到有的过程,一步步搭建一个 CPU 出来,希望大家可以借助这个过程,理解CPU、内存等计算机主要部件的工作原理。
1.逻辑门
电子开关 —— 机械继电器(Mechanical Relay)
2.门电路(Gate Circuit)
接下来,我们学习如何使用电子开关构建一些有用的部件 —— 门电路。可以实现 1 位(bit) 的基本逻辑运算。其实几个门电路非常好理解,Java的逻辑运算差不多。
1.非门
2.与门
3.或门
4.异或门
这里的 true 和 false 在计算机里其实就是 1 和 0
3.算术逻辑单元 ALU(Arithmetic & Logic Unit)
1.算术单元
算数单元,负责计算机里的所有数字操作,比如四则运算,当然它能做的远远不止这些。
半加器:
半加器就是通过一个与门和异或门,来计算两个 1位(bit)数的相加,既要考虑到和也要考虑到进位。
全加器:
全加器是通过两个半加器进行 3个1位(bit)的数 进行运算,同样要考虑计算出来的和是否要进位
加法器
2.逻辑单元
逻辑单元主要用来进行逻辑操作,最基本的操作就是 与、或、非操作,但不只是一位(bit)数的比较
三、存储器
存储器分为内存和外存
内存:就是平时所说的电脑内存,也就相当于手机的运存。
外存:磁盘、U盘等。
内存比较而且贵,外存比较大但比较便宜。
CPU上其实也能存储,CPU上的寄存器,内存更小速度非常的快,也更加的贵!
四、操作系统(OS)
1,进程
进程是操作系统中非常核心的一个概念,进程其实是计算机完成工作的一个”过程”
PCB:进程的控制块,这是一个C语言的结构体类似于Java中的类,一个结构体对象就对应一个进程
组织:使用一定的数据结构来组织,常见的作法就是使用双向链表
查看进程列表,本质上就是遍历操作系统内核中的这个链表,并显示其中的属性;
创建一个进程:本质上就是创建一个PDB对象,加入到内核的链表中
销毁一个进程,本质上就是把这个PCB对象从内核链表中删除掉
PCB中大概有那些属性呢?
pid:一个进程的身份标识,一个机器同一时刻,不可能有两个进程的 pid 相同
内存指针:描述了这个进程使用的内存空间是哪个范围(虚拟地址空间)
文件描述符表:描述了这个进程都打开了那些文件
系统中打开一个文件,其实就得到了一个”文件描述符”,这个文件描述符就像一个遥控器一样,文件数据是存放在磁盘上的,代码中操作磁盘数据不像操作内存数据那么方便,所以往往是借助这种遥控器的方式来操作
2.进程管理(重点)
我们电脑上有几百个进程在运行,但电脑只有1个CPU,而且一般都是4核或者8核的CPU,8核心相当于CPU有8个分身,那么这么多进程是怎么运行的呢?
进程这么多,CPU就那么几个分身。那么就涉及到进程调度了,电脑上的多任务系统其实就是基于进程调度这样的机制来完成的。
并发式执行
并发式执行:1个CPU运行多个进程,
由于CPU的运行速度极快,虽然CPU在一直进行切换,但是咱们坐在电脑前的用户,是感知不到这个切换的过程的。
并行式执行
并行式执行:多个CPU,运行多个进程
CPU1运行进程1,CPU2运行进程2.
进程1和进程2无论是微观还是宏观,都是同时执行的。
真实的计算机,真实的操作系统在进行进程调度的时候,是并发并行两种策略综合使用的。
3. 进程的属性
(1) 进程的状态
运行状态:进程正在运行
就绪状态:进程已经做好准备,随时准备被CPU调度执行
阻塞状态:进程在此状态不能执行,只有等阻塞该进程的事件完成后才能执行,比如编程时等待我们输入
(2) 进程的优先级
给进程安排不同的优先级,优先级越高的进程,更容易被CPU调度执行。
(3) 进程的上下文
记住进程上次运行到哪个指令了,方便下次调度的时候能够继续从这个位置来运行。
(4) 进程的记账信息
记录进程在CPU上执行了多久了,用来辅助决定这个进程是继续执行,还是要调度出CPU了。
4. 虚拟地址空间
一个进程想要运行,就需要给它分配一些系统资源,其中内存就是一个最核心的资源。
物理地址:真实的内存的地址
假设:
为什么要有虚拟地址空间?而不直接访问真实的物理地址?
目的就是为了一定程度的减少内存访问越界,带来的后果
如果这是一个真实的物理地址,这个修改就真的把 0x701给修改了,
恰好 0x701是进程2 要使用的内存地址,此时进程2 可能就出 bug 了,就会直接奔溃
但如果进程访问的是虚拟地址,也尝试修改0x701
此时系统就要针对 0x701 来查询页表,找到对应的物理地址
由于 0x701 已经是非法地址,在 页表中查不到了,系统就会明白,是在越界访问,于是就直接让这个进程出现崩溃(系统就会发送一个型号,这个信号通常会导致进程奔溃),防止影响到其它线程。
这样做,就让进程和进程之间相互影响的可能性变小了,隔离性增加了,进程也就更加稳定了。
总结
进程的几个重要属性:
- 进程的状态
- 进程的优先级
- 进程的上下文
- 进程的记账信息
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132958.html