【linux】进程【1】


1.冯诺依曼体系结构

数学家冯·诺依曼提出了计算机制造的三个基本原则(采用二进制、程序存储、顺序执行),以及计算机的五个组成部分(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构,根据这一原理制造的计算机被称为冯·诺依曼结构计算机。

冯·诺依曼最先提出程序存储的思想,并成功将其运用在计算机的设计之中。冯·诺伊曼体系结构是现代计算机的基础,现在大多计算机仍是冯·诺伊曼计算机的组织结构,因此冯·诺依曼又被称为“现代计算机之父”。

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
在这里插入图片描述
截至目前,我们所认识的计算机,都是由一个个的硬件组件组成

  • 输入单元:包括键盘, 鼠标,扫描仪, 写板等
  • 中央处理器(CPU):含有运算器和控制器等。
  • 输出单元:显示器,打印机等

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

  • 这里的存储器指的是内存
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  • 一句话,所有设备都只能直接和内存打交道

例:如果我用qq与同学聊天,那我发送的信息数据是如何流向的:
在这里插入图片描述

.冯·诺依曼体系结构特点:

(1)计算机处理的数据和指令一律用二进制数表示。

(2)指令和数据不加区别混合存储在同一个 存储器 中(硬盘)

(3)顺序执行程序的每一条指令。(重点是“顺序”)

2.操作系统(Operator System)

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

  • 内核(进程管理,内存管理,文件管理,驱动管理)
  • 其他程序(例如函数库, shell程序等等)

设计OS的目的

  • 与硬件交互,管理所有的软硬件资源
  • 为用户程序(应用程序)提供一个良好的执行环境

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

在这里插入图片描述
处理器(CPU)管理

  • 在多道程序环境下,cpu的分配和运行都以进程(或线程)为基本单位,因此对cpu的管理可理解为对进程的管理。进程管理的主要功能包括进程控制、进程同步、进程通信、死锁处理、处理机调度等

存储器管理

  • 为多道程序的运行提供良好的环境,方便用户使用及提高内存的利用率,主要包括内存分配与回收、地址映射、内存保护与共享和内存扩充等功能。

文件管理

  • 算机中所有的信息都是以文件的形式存在的,操作系统中负责文件的管理的部分称为文件系统,文件管理包括文件存储空间的管理、目录管理及文件读写管理和保护

设备管理

  • 设备管理的主要任务是完成用户的I/O请求,方便用户使用各种设备,并提高设备的利用率,主要包括缓存管理、设备分配、设备处理和虚拟设备等功能

3. 进程

基本概念
课本概念:程序的一个执行实例,正在执行的程序等
内核观点:担当分配系统资源(CPU时间,内存)的实体

描述进程-PCB
进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。
课本上称之为PCB(process control block), Linux操作系统下的PCB是: task_struct
task_struct-PCB的一种

  • 在Linux中描述进程的结构体叫做task_struct。
  • task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

task_ struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/ O状态信息: 包括显示的I/O请求,分配给进程的I/ O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。 其他信息

3.1 查看进程的方法

方法一:ps ajx | grep '[ ] ’
在这里插入图片描述

方法二:ls /proc:将当前所运行的进程以文件方式打印出来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 通过系统调用获取进程标示符

【getpid/getppid系统调用】

功能描述:
getpid返回当前进程标识,getppid返回父进程标识。

用法:

#include <sys/types.h>
#include <unistd.h>

pid_t getpid(void);//获取当前进程的pid
pid_t getppid(void);//获取当前进程的父进程的pid

在这里插入图片描述
在这里插入图片描述

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

#include <unistd.h>
pid_t fork(void);

调用fork()函数会创建出一个进程,区分当前进程是父进程还是子进程可以根据fork函数的返回值来判断,如果返回值为0则当前进程是子进程,大于0则当前进程是父进程且这个大于0的数就是被创建的子进程的id。

下面用fock()创建的子进程(fock之后有2个不同的执行流):

在这里插入图片描述
在这里插入图片描述

3.4进程状态

下面这张图片展示了进程状态之间的关系
在这里插入图片描述

查看进程:ps aux / ps axj 命令

  • R运行状态(running) : 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列 里。

运行态是进程正在CPU上运行,还是进程只要在运行队列中就叫做运行态呢?
答:所谓的运行态,是只要在运行队列中就叫做运行态,代表我已经准备好了,随时可以被调度!

就像小明正在食堂排队打饭,别人打电话问他在干什么,小明回复说:“我在吃饭”,这时虽然小明并没有打到饭已经开始吃了,但是他已经准备好了,并在排队了。

查看R状态:
在这里插入图片描述

  • S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠)
    在这里插入图片描述

  • D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。

  • T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可 以通过发送 SIGCONT信号让进程继续运行。
    在这里插入图片描述

  • X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态

3.4.1 Z(zombie)-僵尸进程

  • 僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用),没有读取到子进程退出的返回代码时就会产生僵死(尸)进程
  • 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
  • 所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态

在这里插入图片描述
僵尸进程危害

  • 僵尸进程处于僵死状态,资源并没有完全被释放(进程的ID号、进程的退出状态、进程运行的CPU时间等), 可能会导致资源泄露的问题
  • 并且由于操作系统所能创建的最大进程数量是有限的(进程号被大量占用)会导致新的进程无法创建

3.4.2 孤儿进程

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了init进程身上,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤 儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和政府出面处理它的一切善后工作。因此孤儿进程并不会有什么危害

4.进程优先级

Linux 是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。但是 CPU 在一个时钟周期内只能运算一条指令(现在的 CPU 采用了多线程、多核心技术,所以在一个时钟周期内可以运算多条指令。 但是同时运算的指令数也远远小于系统中的进程总数),那问题来了:谁应该先运算,谁应该后运算呢?这就需要由进程的优先级来决定了。

基本概念

  • cpu资源分配的先后顺序,就是指进程的优先权(priority)
  • 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。

查看系统进程
命令: ps -l

在这里插入图片描述
我们可以看到一些信息:

UID : 代表执行者的身份
PID : 代表这个进程的代号
PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
PRI :代表这个进程可被执行的优先级,其值越小越早被执行
NI :代表这个进程的nice值

其中,PRI 代表 Priority,NI 代表 Nice。这两个值都表示优先级,数值越小代表该进程越优先被 CPU 处理。不过,PRI值是由内核动态调整的,用户不能直接修改。所以我们只能通过修改 NI 值来影响 PRI 值,间接地调整进程优先级。

  • PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为: PRI(new)=PRI(old)+nice
  • 这样,当nice值为负值的时候,那么该程序将会优先级值(PRT)将变小,即其优先级会变高,则其越快被执行
  • 每次进行新的 PRT 计算时都会旧的PRT都是默认值80,不会因为改变一次就那改变后的那个值进行计算

4.1如何修改进程的nice

用top命令更改已存在进程的nice:

top
进入top后按“r”–>输入进程PID–>输入nice值

在这里插入图片描述
修改 NI 值时有几个注意事项:

  • NI 范围是 -20~19。
  • 普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。
  • 普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。
  • 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。

其他概念

  • 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级
  • 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰
  • 并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行
  • 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值