1、冯诺依曼体系结构
2、进程的概念
3、getpid和getppid
4、查看进程
5、命令进程的父进程
6、用fork创建子进程
冯诺依曼体系结构的五大组成部分:输入设备、输出设备、存储器、运算器、控制器。
其中运算器和控制器组成cpu。(这里的存储器就是我们常说的内存)
常见的输入设备:键盘、鼠标、麦克风、磁盘、网卡、摄像头等
常见的输出设备:显示器、音响、磁盘、网卡、显卡、打印机等
黑线代表数据信号、红线代表控制信号
cpu不与输入设备和输出设备直接进行数据信号上的交互,但可以直接进行控制信号上的交互。
同时可以看出该结构是以存储器为中心的,任何数据信号的交互都得通过存储器,这种有了存储器的计算机硬件结构可以大大提高cpu的利用效率。
介绍一下:从硬件角度出发,用qq发送“一段文字”给你的好友时,数据的流向大概是怎样的?
01、进程的概念
进程简单来说就是一个运行起来的程序
02、getpid和getppid
pid作用:标识进程的唯一性,类属于学号、身份证这样的概念。
ppid:代表父进程的pid。
03、查看进程
1、用ps命令
2、查看/proc/目录
/proc目录下记录了实时进程的信息,可通过/proc/
的方式找到当前进程对应的文件夹。
我们目前只关系下面这两个文件
cwd:代表当前工作目录
exe:代表该进程对应的磁盘文件
cwd需要仔细谈谈,看下面一段代码试验:
当我们运行./test的时候,我们发现在当前工作目录下生成了a.c
具体什么是当前工作目录呢?
我们发现,当我们进入demo,用../test的方式执行test,发现在demo目录下生成了a.c,说明当前工作目录就是
3、用top命令
04 为啥进程的ppid是不变的?
因为ppid是bash的pid,它负责解释你的命令文件,你所执行的命令都是bash的子进程。
运行原理:bash不断的创建子进程,然后该子进程利用进程替换的方式来执行你的命令文件的代码。当子进程执行完毕或者被终止结束掉,父进程bash就会重新创建新的子进程来帮你继续执行下面的命令。
05 用fork创建子进程
fork是一个系统调用,常用来创建一个子进程,创建后的子进程的代码拷贝自父进程,数据则会发生写实拷贝(进程的独立性)。
试验结果:打印了两次,且id的值不同。
问题一:fork如何做到返回两个值?
fork在准备返回之前就已经生成了子进程的pcb,cpu执行父进程的代码时,返回子进程的pid,cpu执行子进程的代码时就返回0。后续在讲解进程虚拟地址空间和物理地址的关系会详细介绍id有两个不同值的问题。
问题二:fork为啥给父进程返回子进程的pid,给子进程返回0。
父进程可能有多个子进程,给父进程返回子进程的pid方便父进程管理子进程,给子进程返回0,子进程只有一个父亲。返回大于等于0的数字,代表fork调用成功,如果子进程需要父进程的pid,可通过getppid()来获取。