冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。
我们日常使用的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系
注意:这里的存储器指的是内存,而不是硬盘(外设)!
内存:掉电易失(临时存储),但速度相对快!
运算器+控制器+其他=CPU
CPU:在读写的时候,在数据层面只与内存打交道,不为什么,就是为了提高整机效率!
输入设备:键盘,鼠标,扫描仪 …
输出设备:屏幕,打印机 …
硬盘:外设,永久存储,速度较慢!
CPU其实没有大家想象的那么聪明,相反,其实它很笨,只能被动的接收别人的指令,别人的数据。
通过指令去执行,从而达到了计算数据的目的
所以CPU必须要有认识指令的能力
从而决定了它本身就有自己的指令集:精简指令集+复杂指令集
所以我们写代码,编译的代码的本质就是生成让CPU认识的二进制可执行程序(指令)
所谓的操作系统其实就是一个进行软硬件资源管理的软件!!!
在整个计算机软硬件架构中,操作系统的定位是: 一款纯正的“搞管理”的软件
细分化其中操作系统包括 :
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库, shell程序等等)
设计OS的目的
- 与硬件交互,管理所有的软硬件资源
- 为用户程序(应用程序)提供一个良好(稳定,良好,安全)的执行环境
那操作系统是怎么进行管理的呢?
管理的本质又是什么呢?
下面给大家举个例子:
计算机管理硬件
- 描述起来,用struct结构体
- 组织起来,用链表或其他高效的数据结构
基本概念
根据维基百科的定义,进程(Process)是计算机中已运行程序的实体。用户下达运行程序的命令后,就会产生进程。进程需要一些资源才能完成工作,如CPU使用时间、存储器、文件以及I/O设备,且为依序逐一进行,也就是每个CPU核心任何时间内仅能运行一项进程。
课本概念:程序的一个执行实例,正在执行的程序等
内核观点:担当分配系统资源(CPU时间,内存)的实体
相信大家看到这样的定义瞬间都不理解,或者概念很模糊,接下来看我给你举个例子!
进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
课本上称之为PCB(process control block), Linux操作系统下的PCB是: task_struct
- 在Linux中描述进程的结构体叫做task_struct。
- task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息
- 标示符: 描述本进程的唯一标示符,用来区别其他进程。
- 状态: 任务状态,退出代码,退出信号等。
- 优先级: 相对于其他进程的优先级。
- 程序计数器: 程序中即将被执行的下一条指令的地址。
- 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
- 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
- I/ O状态信息: 包括显示的I/O请求,分配给进程的I/ O设备和被进程使用的文件列表。
- 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
- 其他信息
程序运行的时候,可以通过
$ ps ajx |grep 程序名
来进行查看当前运行的进程