目录
我们所熟知的大部分计算机都遵循冯·诺伊曼体系结构
截至目前,我们认识的计算机,它们都由一个个硬件组成:
关于冯·诺依曼:
- 这里的存储器指的是内存
- 不考虑缓存情况,CPU只能对内存进行读写,不能访问外设(输入输出设备)
- 外设(输入和输出设备)要输入和输出数据,也只能通过内存
举个例子:登录qq,张三给李四发送消息 “你好”,“你好”这条消息从键盘输入到内存中,然后CPU经过一系列处理将“你好”还给内存,再由内存交给网卡通过网络发送给张三(具体怎么通过网络发送这里省略),张三通过网卡接收到内存中,再由CPU处理后进入内存,最后再由张三的显示器从内存中读取“你好”然后打印
何计算机都有一个基本的程序集合,称为操作系统(OS)。笼统的说,操作系统包括:
- 内核(进程管理,文件管理,内存管理,驱动管理)
- 其他程序(如函数库,shell程序)
- 与硬件交互,管理好软硬件资源
- 为用户程序提供一个良好的运行环境
操作系统就是一款搞 "管理" 的软件
管理是什么?六子真言:先描述,在组织
了解了这些知识后,那么一个操作系统是怎么管理一个个进程的呢?很简单,还是六字真言:
先描述,在组织。用一个结构体将进程描述起来,再用高效的数据结构将这些进程组织起来。
课本概念:程序的一个执行实例,正在执行的程序
内核概念:担当分配系统资源(cpu时间,内存)的实体
- 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合
- 课本上称为PCB(process control block),Linux操作系统下的PCB是:task_struct
- 在Linux下描述进程的结构体叫做task_struct
- task_struct是Linux内核的一种结构体,它会被装载到RAM(内存)里并且包含着进程信息
标识符:描述本进程的唯一标识符,用来区别其他进程
状态:任务状态,退出代码,退出信号等
优先级:相对于其他进程的优先级
程序计数器:程序中即将被执行的下一条指令的地址
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据:进程执行时处理器的寄存器中的数据
I/O状态信息:包括显示的IO请求,分配给进程的I/O设备和进程使用的文件列表
记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记帐号等
其他信息
可以在内核源代码里找到它,所以运行在系统里的进程都以task_struct链表的形式存在内核里
进程的信息可以通过/proc系统文件夹查看
要获取进程pid为1的进程信息,需要查看/proc/1/这个文件夹
大多数进程信息还可以通过ps和top这些用户级工具来获取
- 子进程ID:PID
- 父进程ID:PPID
- #include
- #include
- #include
- using namespace std;
-
- int main()
- {
- cout << "you can see me" << endl;
- while(1)
- {
- pid_t id = getpid();
- pid_t pid = getppid();
- cout << "我的pid是:" << id << endl;
- cout << "我的ppid是:" << pi