目录
1、冯诺依曼体系结构
输入设备:键盘、话筒、磁盘、网卡等。
输出设备:显示器、磁盘、网卡、显卡等。
存储器(内存)
运算器和控制器(cpu)
注意:运算器是处理算数运算和逻辑运算。
控制器是执行cpu中的控制逻辑,例如:读取指令。
有了内存,从数据层面上,cpu就不需要直接和外设打交道。
2、理解操作系统
操作系统是一款进行软硬件资源管理的软件。
为什么设计操作系统?
操作系统对下要管理好软硬件资源,对上给用户提供稳定、高效、安全的运行环境。
为什么会出现系统调用接口?
操作系统不相信任何用户,但还要为用户提供服务。就类似于银行,银行并不信任你,但是还为你提供服务,银行开设了一个个的窗口,来为客户提供服务。因此,操作系统提供了一个个的系统调用接口,来为用户提供服务。
怎么理解系统调用接口?
说人话,就是一个个函数。因为Linux是用C写的,可以理解为就是一个个C函数。
系统调用接口vs上层语言库?
因为系统调用接口比较复杂,就有一些人对系统调用接口进行软件封装,以第三方库的形式出现,或者以语言的形式出现。
3、如何理解管理?
下面将叙述一个小故事:
站在校长的角度:可以通过一个结构体,里面存放了一名学生的所有信息(数据),再将所有学生的结构体通过一个链表链接起来,这样一来,对学生的管就变成了对链表的管理,也就是对数据结构的增删查改。
上述再总结一下就是:管理:(1)先描述(先描述被管理对象)(2)再组织(将被管理对象使用特定的数据结构组织),对目标的管理转化为对数据的管理。
所以,所谓管理,就是先描述,再组织。
4、进程
为什么会有pcb?
系统中可能会存在大量的进程,所以操作系统要对进程进行管理。管理就要先描述再组织,任何进程在成立之初,操作系统就要为该进程创建pcb(进程控制块)。
pcb是什么?
操作系统上的pcb,从语言上看,就是一个结构体类型。在Linux中,pcb就是struct task_struct,里面存放了进程的所有属性。
ps axj 查看系统中的所有进程
ps ajx 查看系统中的所有进程
当一个程序运行起来时,不能再称为程序,应该称为进程。
有了进程控制块,所有进程管理任务就与进程对应的程序无关了,与进程pcb强相关。
5、pcb的内部构成
1、标示符
标示符:描述本进程的唯一标示符,用来区别其他进程。
#include<sys/types.h>
#include<unistd.h>
pid_t getpid(void); 获得当前进程id
pid_t getppid(void); 获得父进程id
ctrl c或kill -9 pid 干掉对应的进程
注意:在命令行上运行的命令,基本父进程都是bash
2、状态
状态: 任务状态,退出代码,退出信号等。
echo $? 输出最近执行命令的退出码
注意:main函数中的return返回的是进程退出时的退出码
3、优先级、程序计数器、内存指针、I/O状态信息、记账信息
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
4、上下文数据
上下文数据: 进程执行时处理器的寄存器中的数据。
5、命令模式下批量化注释
批量化注释:命令模式下:ctrl v,按j下翻,再按大写I,双斜杠//,再ESC
删批量化注释:ctrl v,l选中区域,按d
6、/proc目录
进程启动之后,会在proc目录下形成一个目录,以自身pid编号作为目录名,然后形成一个文件夹,当进程退出时,会自动消失。