目录

linux下的进程

linux下的进程

1、冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系

https://i-blog.csdnimg.cn/direct/21b9f7f78a63495385677bb3e2f3bd27.png

https://i-blog.csdnimg.cn/direct/1e78fa106afd4093b1ad83188b419422.png

https://i-blog.csdnimg.cn/direct/861ba34deb55423482fc6ed9abc9d438.png

https://i-blog.csdnimg.cn/direct/073684d4bd0b4929ae9d882df514db93.png

当数据在计算机内部流转时,本质上是不同的设备间不停地拷贝

2、操作系统

2.1 概念

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

内核(进程管理,内存管理,文件管理,驱动管理)

其他程序(例如函数库,shell程序等等)

https://i-blog.csdnimg.cn/direct/0428a21f64d24d0b8514f7587e5ada04.png

2.2 设计OS的目的

与硬件交互,管理所有的软硬件资源

为用户程序(应用程序)提供一个良好的执行环境

https://i-blog.csdnimg.cn/direct/e6c6238273874975ae1e8c0ca2afa7bf.png

2.3 定位

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

2.4 如何理解 “管理”

管理的例子

描述被管理对象

https://i-blog.csdnimg.cn/direct/ac9877365601425aba7c1fac135029af.png

组织被管理对象

https://i-blog.csdnimg.cn/direct/2d67edd5f2af45a69201ec18ae8ba4ed.png

https://i-blog.csdnimg.cn/direct/79e6398ed07645bf9128226dc3b00acf.png

我们的程序都不是直接写入硬件,都是贯穿操作系统

https://i-blog.csdnimg.cn/direct/1417b0b727b74e0cb4ba22eda90f3b35.png

3、进程

3.1 基本概念

https://i-blog.csdnimg.cn/direct/35621df8048841219016a1d6279c0cf6.png

3.2 描述进程-PCB

https://i-blog.csdnimg.cn/direct/2f3e8d61a9734cb3841063dd9365c0a8.png

3.3 最早版本task-struct(linux)

https://i-blog.csdnimg.cn/direct/c8b9f44dc61a4252b78c1b31316cef0c.png

https://i-blog.csdnimg.cn/direct/aac595d57e45436a80f06c96ed174d50.png

3.4 查看进程

https://i-blog.csdnimg.cn/direct/72dd5ca4173648b1a5f88a87c381d208.png

https://i-blog.csdnimg.cn/direct/5dd851d21d2340f9853457edff789c75.png

https://i-blog.csdnimg.cn/direct/cc7e2e12af87448ebe928aa32088ad31.png

杀掉进程:

https://i-blog.csdnimg.cn/direct/69549d5bade14d219592cc3cd3822c18.png

20636:进程pid

https://i-blog.csdnimg.cn/direct/f6329366d7214cc694c93d8b52af1ab2.png

proc:process(进程的信息以文件形式存于这个目录)

ps底层就是对/proc里的进程进行文本分析

https://i-blog.csdnimg.cn/direct/be8d195135204657a43818137589843e.png

查看该进程所有的属性

cwd:

https://i-blog.csdnimg.cn/direct/f13ad26e956c4b66976c4a0813701859.png

一般我们写完代码后,执行可执行程序会在当前目录下创建exe,当前路径(cwd);

chdir:改变上述文件创建位置

/proc不是硬盘级别的文件,而是内存级别的,每次启动系统,都会刷新

3.5 getppid(副id)

https://i-blog.csdnimg.cn/direct/724ebfaee9574659a7985386811e7bd0.png

4 系统调用,创建进程

4.1 见一见

https://i-blog.csdnimg.cn/direct/96951e11f7e34101a2e36669fac29edf.png

https://i-blog.csdnimg.cn/direct/661595a0bc2843579c8b5b87bd755532.png

https://i-blog.csdnimg.cn/direct/01a2f2fde15f41f38f9d628ec7c8ec00.png

4.2 理解

https://i-blog.csdnimg.cn/direct/31581cbf707c469fa02a175e25bec0f2.png

https://i-blog.csdnimg.cn/direct/022bee4e155140e7aadb0e8dca541070.png

4.3 多进程创建

https://i-blog.csdnimg.cn/direct/104d5e0e53ee47efad0f7598cd59be05.png

https://i-blog.csdnimg.cn/direct/884ee3fb4cb84cdcb3052033cb5f8685.png

4.4

https://i-blog.csdnimg.cn/direct/e8155f411c38411dbcab64a0c48811e0.png

4.5 进程的状态

https://i-blog.csdnimg.cn/direct/5ba8ea297ca446dbb6d5e83c94a70c2a.png

为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在

Linux内核里,进程有时候也叫做任务)。

下面的状态在kernel源代码里定义

 The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

分时操作系统(为每个进度分配时间)

实时操作系统

https://i-blog.csdnimg.cn/direct/2dee2f2ee9d044818735c02de72cbf9d.png

https://i-blog.csdnimg.cn/direct/187ead13ee4446b8803ce20791737bd3.png

-19暂停进程

-18重新启动进程

断点本质是进程暂停

https://i-blog.csdnimg.cn/direct/757651fc027046f4a81e9765f5ed1e81.png

https://i-blog.csdnimg.cn/direct/45a86a2504914dbf8ddfc53a075658c1.png

僵尸进程:该进程的代码与数据已经被回收,但是task_struct还在维护

https://i-blog.csdnimg.cn/direct/cdc531f3cea648d6a2fb6dbb27a0163b.png

https://i-blog.csdnimg.cn/direct/1856e6b260d340a5b84767fb900f0cc4.png

孤儿进程:

https://i-blog.csdnimg.cn/direct/c7e819ce94d1482d99b366f30b0adb40.png

5 进程优先级

https://i-blog.csdnimg.cn/direct/215536a62183412fb6de74e04093cafc.png

https://i-blog.csdnimg.cn/direct/d63906b9b4bf43c48d959fb466328552.png

https://i-blog.csdnimg.cn/direct/ccba7f12dbb84e3fa6b6240bdc3820db.png

6、进程切换

https://i-blog.csdnimg.cn/direct/9be8632da3744b0a9d9cd499b3a613fa.png

//

https://i-blog.csdnimg.cn/direct/e4309e234a464de7b1ba88b90ad22a5c.png

//

https://i-blog.csdnimg.cn/direct/62830a30aa4d45bdb2bc93ecd878ef77.png

//

https://i-blog.csdnimg.cn/direct/617c947b763f4ada9af3779d36b5a0ae.png

//

https://i-blog.csdnimg.cn/direct/c4fcfffd657848a3b8d2ba928f6d47d1.png

保存上次数据的地方肯定在内存中(当前进程的PCB)

https://i-blog.csdnimg.cn/direct/26196309659c478da6145e555e885471.png

7、进程调度

https://i-blog.csdnimg.cn/direct/6cbe6b5bde8e4cd9a8c469d127716038.png

前100给实时进程调度

https://i-blog.csdnimg.cn/direct/0a83ed5f51f240478ca7b1ec9c690ddf.png

https://i-blog.csdnimg.cn/direct/177dbb588e834730847ed1e014658add.png

https://i-blog.csdnimg.cn/direct/d0d7bffa72b0488f8b68fc6f75329e23.png