
⼀句话,所有设备都
只能直接和内存打交道。!!!
对冯诺依曼的理解,不能停留在概念上,要深⼊到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。
解释图如下:

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

• 对下,与硬件交互,管理所有的软硬件资源 • 对上,为⽤⼾程序(应⽤程序)提供⼀个良好的执⾏环境

在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件

这部分由操作系统提供的接⼝,叫做系统调⽤。进程概念理解:

总结:

其中内核数据结构对象有特定的名字————PCB


课本上称之为PCB(processcontrolblock),Linux操作系统下的PCB是:task_struct
ls,pwd…只要执行都是进程
为了演示,先创建一个procss.c,并用vim写入以下程序:
#include<stdio.h>
2 #include<unistd.h> //sleep需要包含的头文件
3 #include<sys/types.h> //getpid的头文件
4 int main()
5 {
6 while(1)
7 {
8 sleep(1);
9 printf("我是一个进程,我的pid:%d\n",getpid());
10 }
11
12 return 0;
13 }
在 根目录 下使用ps axj 可以展示所有进程,那如果我只想要我刚刚运行的a.out程序的进程咋办呢?
“ps axj” 后加上“ | grep + 程序文件 ”:ps axj | head -1来展示各个信息的名称,-----------注意两个指令要用“;”断开


ctrl + c直接杀掉进程
也可以用来查看进程
如果程序退出,那么它就不再是一个进程了,就不会有id了
所有进程都由它的父进程创建
#include<stdio.h>
2 #include<unistd.h>
3 #include<sys/types.h>
4 int main()
5 {
6 while(1)
7 {
8 sleep(1);
9 printf("我是一个进程,我的pid:%d 我的父进程pid:%d \n",getpid(),getppid());
10 }
11
12 return 0;
13 } 



fork()有返回值:
子进程的pid会返回给父进程,(2).0会被返回给子进程-----------所以fork有两个返回值!!!!

运行结果类似如上:
提出问题:





可以理解为,如果两个进程共用同一份数据,但若其中一个修改了数据,那么内存会重新开辟一个数据给那个进程修改,促使两个进程独立
