文章目录
- 前言
- 一、冯诺依曼体系(Von Neumann Architecture)
- 二、内存和硬盘区别
- 三、CPU
- 四、操作系统
- 4.1计算机系统的分层视图
- 4.2进程和线程
- 4.3进程控制块(PCB)
- 4.4进程管理
- 五、经典面试题
前言
计算的需求在⼈类的历史中是⼴泛存在的,发展⼤体经历了从⼀般计算⼯具到机械计算机到⽬前的电⼦计算机的发展历程。⼈类对计算的需求,驱动我们不断的发明、改善计算机。⽬前这个时代是“电⼦计算机”的时代,发展的潮流是:更快速、更稳定、更微型。
一、冯诺依曼体系(Von Neumann Architecture)
现代计算机,大多遵循冯诺依曼体系
• CPU 中央处理器: 进⾏算术运算和逻辑判断.
• 存储器: 分为外存和内存, ⽤于存储数据(使⽤⼆进制⽅式存储)
• 输⼊设备: ⽤⼾给计算机发号施令的设备.
• 输出设备: 计算机个⽤⼾汇报结果的设备.
二、内存和硬盘区别
- 硬盘比较大,内存比较小(这里指的不是物理尺寸,是存储空间容量),针对存储空间–硬盘 > 内存 >> CPU
- 硬盘读写速度比较慢,内存读写速度比较快(几千倍甚至上万倍),针对数据访问速度–CPU >> 内存 > 硬盘
- 内存比硬盘成本更高
三、CPU
电子计算机中的cpu依靠背后的一个时钟来进行周期驱动。ALU + CU + 寄存器 + 时钟组成了我们平时经常看到的⼀个词汇:中央处理器(CenterProcess Unit)简称 CPU。
CPU核心数–通过在编程中引入一些特定的方式,来把多个cpu核心利用起来(并发编程)。
CPU主频-----粗略来讲,就是时钟的震荡的每秒次数,可以近似的看作每秒执行的指令数。
四、操作系统
4.1计算机系统的分层视图
操作系统的定位是:作为一个非常重要的软件,对下管理各种硬件设备;对上给软件提供稳定的运行环境。(抽象封装)
4.2进程和线程
我们的系统,都是“多任务”操作系统,每个跑起来的程序,称为“进程”。
进程是操作系统对⼀个正在运⾏的程序的⼀种抽象,换⾔之,可以把进程看做程序的⼀次运⾏过程;同时,在操作系统内部,进程⼜是操作系统进⾏资源分配的基本单位。
4.3进程控制块(PCB)
计算机内部要管理任何现实事物,都需要将其抽象成⼀组有关联的、互为⼀体的数据。在 Java 语⾔中,我们可以通过类/对象来描述这⼀特征。
// 以下代码是 Java 代码的伪码形式,重在说明,⽆法直接运⾏
class PCB {
// 进程的唯⼀标识 —— pid;
// 进程关联的程序信息,例如哪个程序,加载到内存中的区域等
// 分配给该资源使⽤的各个资源
// 进度调度信息(留待下⾯讲解)
}
这样,每⼀个 PCB 对象,就代表着⼀个实实在在运⾏着的程序,也就是进程。
操作系统再通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,⽅便管理时进⾏增删查改的操作。
操作系统,进行“多任务调度”本质上就是在调度PCB
4.4进程管理
1.先描述(使用类/结构体这样的方式把实体属性列出来)
操作系统一般是用C/C++写的,没有java写的操作系统,因此可以使用结构体。
2.再组织(使用一定的数据结构,把这些结构体/对象串到一起)
在Linux中,使用链表这样的数据结构把若干个task_struct给串起来;当我们看到任务管理器的这些进程时,意味着系统内部在遍历链表,并且打印每个节点的相关信息;如果运行一个新的程序,系统中就会多一个进程,多的进程就需要构造出一个新的pcb并且添加到链表上;如果某个运行中的程序退出了,就需要把对应进程的pcb从链表中删除并且销毁对应的pcb资源。
五、经典面试题
进程和线程的关系/区别?
1.进程包含线程。
2.线程是系统调度执行的基本单位:每个线程是一个独立的执行流,可以执行一些代码,并且单独的参与到CPU的调度中( 状态、上下文、优先级、记账信息…每个线程有自己的一份);进程是系统资源分配的基本单位:每个进程有自己的资源,进程中的线程共用这一份资源(主要是内存空间和文件描述符)([^1]: 文件描述符是一个用于标识已被进程打开的文件的整数。在Unix-like操作系统中,包括Linux和Mac OS等,文件描述符是对文件、管道、套接字等I/O资源的引用。每个进程都有一个文件描述符表,其中存储了该进程打开的文件的信息)。
3.进程和进程之间不会互相影响;同一个进程中的线程之间,可能会相互干扰,引起线程安全问题,例如同一个进程中的某个线程抛出异常,可能影响到其他线程,会把整个进程中的所有线程都异常终止。
4.线程并不是越多越好,适度就行,如果线程过多,调度开销可能非常明显。