一、冯诺依曼体系结构
冯诺依曼体系机构图
外设:
- 存储器:就是内存;
- 输入设备:键盘、网卡、磁盘...
- 输出设备:显示器,网卡,磁盘,扬声器...
CPU:
- 计算器:对我们的数据进行计算任务(算数运算、逻辑运算);
- 控制器:对我们的计算硬件过程进行一定的控制;
有的设备是纯的输入,有的设备是纯的输出,也有既是输入也是输出的设备;
每一个组件都是独立的个体,因此想要它们一起工作,各个单元都必须用“线”连接起来:1、系统总线(CPU和内存交互);2、IO总线(内存和外设);
- 不考虑缓存的情况,这里的CPU只能对内存进行读写,不能访问外设;
- 外设要输入/输出数据也只能从内存中读取或写入内存;
二、操作系统
操作系统是一款软硬件资源管理器,它也是一个基本的程序集;
- 内核(内存管理、文件管理、驱动管理、进程管理)
- 其它程序(例如函数库、shell程序等)
操作系统层状结构:
底层硬件 | 驱动程序 | 操作系统 | 系统调用接口 | 用户操作接口 | 用户
注意:操作系统不相信任何用户,所有访问操作系统的行为,只能通过系统调用完成
设计操作系统的目的:
- 与硬件交互,管理所有的软硬件资源
- 为用户(普通用户(应用程序),程序员)提供一个良好的执行环境(稳定、安全、高效)
管理方式:
- 先描述后组织,即先用结构体描述对象,再将管理问题转化为对数据结构的增删查改;
三、进程
一个已经加载到内存中的程序和数据 + 操作系统为它生成的PCB,就是一个进程;
多个PCB组成数据结构,CPU对这个数据结构进行管理;一个PCB可能处在多个不同的数据结构里,即可能会被放置在不同的队列里;
PCB(process control block):描述进程所有的属性(PID、状态、优先级、代码在内存中的指针)的结构体【在Linux中是task_struct,task_struct是PCB的一种,基本组织方式是双链表】
指令:ps ajx —— 显示所有的进程及其信息
进程文件:/proc 该目录下会实时生成/删除/更新以PID命名的所有进程的目录,PID目录下会存储该进程下的属性文件;
task_struct内容分类:
- 标识符:描述本进程的唯一标识符,用来区别其它进程;
- 状态:任务状态;
- 优先级:相对于其它进程的优先级;
- 程序计数器:程序中即将被执行的下一条指令的地址;
- 内存指针:包括程序代码和数据的指针和与其它进程共享的内存块的指针;
- 上下文数据
- I/O状态信息
- 记账信息
- 其它
/proc/PID/exe—>代码在磁盘中的地址
/proc/PID/cwd—>当前进程的工作目录,也是代码在磁盘中所在的目录