进程概念
引言(操作系统如何管理)
在冯诺依曼体系结构中,计算机由输入设备、输出设备、运算器、控制器和存储器 组成。我们使用计算机的时候,实际就是数据在这些硬件中传递的过程。
硬件的行为由驱动 控制,驱动又由更上层的操作系统 控制。操作系统又会向上层提供系统调用接口 ,使用户可以通过系统调用逐级向下控制硬件行为。
操作系统负责与硬件交互,管理所有的软硬件资源,并给用户程序提供一个良好的执行环境 ,所以操作系统在计算机中起着承上启下的重要作用:
毋庸置疑,因为有着许多程序的执行,我们的计算机才能运转起来,这其中正在执行的程序就被称为进程。而操作系统就是通过管理这些进程来管理软硬件资源的。
在管理这些进程时,其实只需要将这些进程的属性数据组织为一个结构体,再对这些结构体进行管理即可 。而不需要管理这些进程对应的大量代码。从操作系统的角度来讲,进程也可以被定义为程序属性结构体和对应代码的集合。
基本概念
前面已经介绍过进程的定义了,对于操作系统,它是程序属性结构体和对应代码的集合:
描述与组织进程
进程的信息被描述在数据控制块PCB(process control block) 中的,即进程属性的集合;
在Linux中,描述进程的结构体为task_struct
,是PCB的一种。其中包含着进程的各种信息。其中大致包括:
- 标示符:描述本进程的唯一标示符,用来区别其他进程;
- 状态:任务状态,退出代码,退出信号等;
- 优先级:相对于其他进程的优先级;
- 程序计数器:程序中即将被执行的下一条指令的地址;
- 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针;
- 上下文数据:进程执行时处理器的寄存器中的数据;
- I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表;
- 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等;
在Linux中,所有运行在系统中的进程都是使用链表来组织在内核中的。
查看进程
进程的信息可以使用ls
在 /proc
系统文件夹 中查看:
也可以使用ps axj
查看全部进程以及一些进程的信息:
进程pid与ppid
pid
是进程的标识符,即进程的编号 ,在任何时候都是唯一的只有当一进程终止并回收后,该编号才会被重新使用。
ppid
是该进程父进程的pid
,子进程由父进程创建,在子进程结束后要向父进程发出信号。
getpid与getppid
getpid
可以获取该进程的pid
,getppid
可以获取该进程父进程的pid
:
我们可以通过一个死循环,其中不停的打印该进程的pid
与ppid
,来观察:
在进程运行时,我们也可以使用ps axj
在通过管道让grep
筛选后,来查找该进程的一些基本信息 :
这里虽然查找到了我们的testproc
进程,但是也多出了一个grep --color=auto testproc
,这是因为grep
要能执行查找的操作,它本身也要是一个进程,自然就会被筛选到并打印出来 。
想要不显示这条,只需要-v
过滤掉即可 :
总结
关于进程的一些基本概念就介绍完了
这篇文章只是进程的开始,后面会更详细的介绍进程的相关知识,欢迎持续关注哦
如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题,欢迎大家在评论区提出
如果本文对你有帮助,希望一键三连哦
希望与大家共同进步哦