目录

Linux-进程概念

Linux-进程概念

本节学习重点:

• 认识冯诺依曼系统

• 操作系统概念与定位

• 深⼊理解进程概念,了解PCB

• 学习进程状态,学会创建进程,掌握僵⼫进程和孤⼉进程,及其形成原因和危害

• 了解进程调度,Linux进程优先级,理解进程竞争性与独⽴性,理解并⾏与并发

• 理解进程切换,以及Linux2.6 kernel,O(1)调度算法架构

• 理解环境变量,熟悉常⻅环境变量及相关指令, getenv/setenv函数

• 理解C内存空间分配规律,了解进程内存映像和应⽤程序区别, 认识虚拟地址空间。

1.冯诺依曼体系结构

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

https://i-blog.csdnimg.cn/direct/98c16e8c09a8405e806394bbc704794a.png

关于冯诺依曼,必须强调⼏点:

• 这⾥的存储器指的是内存

• 不考虑缓存情况,这⾥的CPU能且只能对内存进⾏读写,不能访问外设(输⼊或输出设备)

• 外设(输⼊或输出设备)要输⼊或者输出数据,也只能写⼊内存或者从内存中读取。

• ⼀句话,所有设备都只能直接和内存打交道。

对冯诺依曼的理解,不能停留在概念上,要深⼊到对软件数据流理解上。

2.操作系统(Operator System)

2.1概念

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

2.2设计OS的目的

https://i-blog.csdnimg.cn/direct/7c0824726619470383f8be24d8b53e44.png

2.3核心功能

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

2.4理解“管理”

计算机管理硬件

  1. 描述起来,⽤struct结构体

  2. 组织起来,⽤链表或其他⾼效的数据结构

2.5系统调用和库函数的概念

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

3.进程

3.1进程概念和基本操作

• 课本概念:程序的⼀个执⾏实例,正在执⾏的程序等

• 内核观点:担当分配系统资源(CPU时间,内存)的实体。

3.1.1描述进程-PCB

https://i-blog.csdnimg.cn/direct/55b004c21e8f4693b4d1e35b73211d96.png

3.1.2task_struct

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

3.1.3查看进程

https://i-blog.csdnimg.cn/direct/683d4728e3f747bc9cc3b1fb4263347b.png

3.1.4通过系统调用获取进程标识符

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

3.1.5通过系统调用创建进程-fork初识

https://i-blog.csdnimg.cn/direct/62917faba3a4429da8c25a9b87355e89.png

3.2进程状态

3.2.1linux内核源代码

https://i-blog.csdnimg.cn/direct/78b17898119d4e128c961ee834d8e381.png

3.2.2进程状态查看

https://i-blog.csdnimg.cn/direct/5523e20fe53b48728a78c9693e8732b7.png

3.2.3 Z(zombie)-僵尸进程

https://i-blog.csdnimg.cn/direct/207776f98c5749128409fee754b31f00.png

https://i-blog.csdnimg.cn/direct/27809ff2e14e4744b7fc05e9760c95fa.png

3.2.4僵尸进程的危害

https://i-blog.csdnimg.cn/direct/0165840aa77e4b4ab326f80787b5e96b.png

3.2.5孤儿进程

https://i-blog.csdnimg.cn/direct/96b64a676fed4115982a2ef78e22cd57.png

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

3.3进程优先级

3.3.1基本概念

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

3.3.2查看系统进程

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

3.3.3 PRI 和 NI

https://i-blog.csdnimg.cn/direct/684cf5461af24ab7869f53bf04ebf469.png

3.3.4 PRI vs NI

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

3.3.5查看进程优先级的命令

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

3.3.6 竞争 独立 并行 并发

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

3.4进程切换

https://i-blog.csdnimg.cn/direct/925cedeec948493e9509f754307395b9.png

3.4.1Linux2.6内核进程O(1)调度队列

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

一个CPU拥有一个runqueue,如果有多个CPU就要考虑进程个数的负载均衡问题。

3.4.2优先级

• 普通优先级:100〜139(我们都是普通的优先级,想想nice值的取值范围,可与之对应!)

• 实时优先级:0〜99(不关⼼)

3.4.3活动队列

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

3.4.4过期队列

https://i-blog.csdnimg.cn/direct/863d6dde8dcb4e1c88bbab48cdb0b002.png

3.4.5active指针和expired指针

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

总结:

在系统当中查找⼀个最合适调度的进程的时间复杂度是⼀个常数,不随着进程增多⽽导致时间成

本增加,我们称之为进程调度O(1)算法!

4环境变量

4.1基本概念

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

4.2常见环境变量

• PATH : 指定命令的搜索路径

• HOME : 指定⽤⼾的主⼯作⽬录(即⽤⼾登陆到Linux系统中时,默认的⽬录)

• SHELL : 当前Shell,它的值通常是/bin/bash。

4.3查看环境变量的方法

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

4.4相关命令

  1. echo: 显⽰某个环境变量值

  2. export: 设置⼀个新的环境变量

  3. env: 显⽰所有环境变量

  4. unset: 清除环境变量

  5. set: 显⽰本地定义的shell变量和环境变量

4.5环境变量的组织方式

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

4.6通过代码获取环境变量

https://i-blog.csdnimg.cn/direct/694d8f729d554a288d74a8eec2cccfde.png

4.7通过系统调用获取环境变量

https://i-blog.csdnimg.cn/direct/89c9bf448b80441eaf0d615f39614467.png

4.8 环境变量通常是具有全局属性的

https://i-blog.csdnimg.cn/direct/4ce2e55770aa4d6cb693a7ff0de9cf83.png

5.程序地址空间

5.1研究平台

• kernel 2.6.32

• 32位平台

5.2 程序地址空间回顾

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

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

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

5.3虚拟地址

https://i-blog.csdnimg.cn/direct/3f7856987583406d9184be7134693289.png

https://i-blog.csdnimg.cn/direct/266dce57d097426e9bdf4afe96ca99b8.png

5.4进程地址空间

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

5.5虚拟内存管理 - 第⼀讲

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

https://i-blog.csdnimg.cn/direct/3dbaad394085499f9b07ba8ac74c2ea7.png

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

https://i-blog.csdnimg.cn/direct/8e4393b9d51e47a7b94c8b33de30eb1b.png

5.6 为什么要有虚拟地址空间

https://i-blog.csdnimg.cn/direct/86607ad2601548faaf3cdbc3009fa31a.png

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