冯·诺依曼体系结构
1、我们首先来了解一下冯·诺依曼体系结构。
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

冯·诺依曼体系结构是现代计算机最核心的设计思想,它主要有三大核心思想:
1、采用二进制;计算机内部数据、指令都用二进制表示、电路实现简单可靠
2、存储程序原理:程序和数据一样存放在内存中,计算机自动存内存取指令、执行指令,不用手动接线改程序。
3、五大核心硬件组成
有如上图的五大部件组成,输入设备、输出设备、存储器、运算器、控制器,其中运算器和控制器组成中央处理器。
工作流程:
输设备入把数据/程序送入存储器,控制器从存储器取指令,运算器按指令完成运算,结果存回存储器,最后由输出设备输出结果。
存储分级

2、体系结构效率问题
外设相比于cpu速度太慢了。 所以在外设和cpu之间引入了存储器。
在数据层面,cpu不和外设之间打交道,只会和内存打交道。计算机中"木桶效应",最慢的就是外设。
局部性原理导致数据可以提前加载,大部分情况下,处理数据的时候就可以成为cpu和内存的交互。(此时,计算机的效率就以内存为主了。)
局部性原理
什么是局部性原理呢? 简单来说就是程序在一段时间之内,倾向于,反复访问同一批数据或附近的数据。
这个原理是缓存(Cache)、虚拟内存等技术的核心理论基础。
两种主要的局部性:
1、时间局部性
如果一个数据项被访问了,那么它在不久的将来很可能被再次访问,
2、空间局部性
如果一个数据项被访问了,那么与它地址相邻的数据项在不久后的将来也很可能会被访问。
问题1:我们说的输入输出,是站在谁的角度考虑的?
站在内存的角度,也就是硬件 ,加载到内存中程序的角度, Input和Output,计算机数据流动的过程,本质就是拷贝。
操作系统

操作系统是什么? 操作系统其实就是电脑的总指挥,它管硬件、管软件、管你和机器沟通,没它电脑就是一块铁。

问题2 为什么要有操作系统呢?
答:操作系统是一个以人为本的软件。
操作系统是一款软件,是一款进行软硬件资源管理的软件;对下它把软硬件资源管理好,对上它给人提供一个良好的使用环境。(稳定的、高效的、安全的)
问题3 在C++中为什么要有类和STL?
答:根据先描述再组织。
(1)c++中为什么要有类? 任何事物都有 属性+行为 比如学生:属性是:学号、姓名、成绩
行为:学习、考试、查分
代码怎么对应? 在c语言中只能分开写,(变量一堆、函数一堆,)->乱、不安全、不好维护;
但是在c++中用类来组织, 封装、继承、多态------> 代码更像现实世界、好写、好改、好拓展
(2)C++为什么要有STL?
一、在日常生活我们写程序都要写这些,存一堆数据:数组、链表、栈和队列等等,做一些常用操作:查找、排序、遍历、删除。
再组织:总不能每次都重写吧?
以前大家都自己造轮子,每个人写的链表、栈都不一样,容易错、效率低、不通用。
STL就是标准库统一好的,容器是:vector、list、map、stack.........
算法:sort、find、reverse......
STL==把常用的数据结构和算法【标准化组织】,拿来就用。
进程
1、定义:进程是具有独立功能的程序在一个数据集合上的一次执行过程,是操作系统进行资源分配和调度的基本单位。
进程和程序的区别
---程序是静态的,是存放在磁盘上的代码和文件。
---进程是动态的,是程序的一次执行过程
---程序永久存在,文件不删除就一直存在
---进程临时存在,运行完就消失。
---程序不能占用资源。
---进程是操作系统分配资源(cpu、内存)的基本单位。
程序被加载到内存里,并且操作系统为它创建了PCB(进程控制块),它就变成了进程。
进程=内核数据结构(PCB)+自己程序的代码和数据
PCB
PCB,process control block ,在Linux中,进程控制块就是 struct task_struct.
在操作系统中,可以同时运行很多程序,每一个都要加载到内存,一定会同时存在很多的进程,
操作系统要对进程进行管理,用一个结构体如下图:

CPU内存在寄存器。
进程上下文切换
- 上下文是什么?
图里的"寄存器"和"程序计数器(PC)",就是一个进程在 CPU 上运行时的上下文(Context)。它记录了进程执行到哪一步、用到了哪些数据。
- 为什么要切换?
当一个进程的时间片用完,或者被更高优先级的进程打断时,操作系统需要把 CPU 让给另一个进程,这就是进程切换。
- 切换时做什么?
保存现场:把当前进程在 CPU 寄存器和程序计数器里的值,保存到它的 PCB( struct task_struct )中。
恢复现场:把下一个要运行的进程的 PCB 中保存的寄存器和程序计数器的值,恢复到 CPU 中。
当代计算机,会给每个进程分配一个时间片,时间片执行完毕,就自动出让cpu,让另一个进程执行,一个进程没有执行完,就可能会把cpu让出去。