admin管理员组

文章数量:1564198


Linux系统编程-进程篇

  • 冯诺依曼体系结构
    • 冯诺依曼的两个重要思想
    • 当代计算机的三级缓存
  • 操作系统
    • 操作系统的概念
    • 操作系统的组成
    • 操作系统作用
    • Linux下的操作系统体系
  • 进程
    • 进程概念
    • 进程特性
    • 进程的组成
    • 进程与程序区别
    • 进程控制块
  • Linux下的底层下的组织
    • 明确Linux操作系统底层
    • Linux底层管理进程的结构体(描述)
    • 从操作系统内核的结构看进程(组织)
    • 查看进程命令
    • 进程号
    • 通过进程调用获取进程标识符
    • 通过系统调用来创建进程fork()命令
      • 1.如何理解进程创建
      • 2.fork()为什么会有两个返回值?
        • 写时拷贝技术
      • 3.fork()父子的执行顺序和代码和数据的复制问题?
      • 4.子进程是从fork之前还是fork之后开始运行?***
    • Linux下查看进程的ps命令
    • Linux环境下的几种状态
      • R状态--运行状态
      • S状态 --睡眠状态,可中断的
      • D状态 ---磁盘休眠状态。
      • T状态--暂停状态
      • X状态 --死亡状态
      • 孤儿进程
        • 孤儿进程的概念。
        • 孤儿进程的产生条件
      • Z状态,僵尸进程***
        • 僵尸进程的危害?
        • 为什么要提出僵尸进程的概念
        • 解决方案
        • 为什么会产生僵尸进程?
    • 解释一下什么是前台程序和后台程序
  • 环境变量--重点
    • 什么是环境变量
    • 环境变量的分类
      • 系统级的
      • 用户级的
    • 使用echo查看环境变量内容
    • 常见的环境变量
    • 查看所有的环境变量env命令
    • 修改环境变量
      • 临时修改 使用命令
      • 永久修改 --用户级别的(针对当前用户)
    • 环境变量的加载顺序
    • 环境变量的组织格式
    • main()函数的几大参数
    • 通过第三方变量environ获取
    • 获取特定环境变量和修改环境变量
      • getenv
      • putenv()函数
  • 进程优先级
    • 区分一下优先级与权限的问题
    • 查看系统进程的优先级数
    • PRI与NI
    • 修改进程的PRI
    • 进程优先级的一些注意
  • 进程状态转换问题
  • 结语

冯诺依曼体系结构


这里的存储器是内存,一般情况下内存不直接与外存打交道,而是通过缓存先将输入/输出 输出到寄存器中,再由寄存器与外存做交互。
当代典型的输入设备:键盘、鼠标、扫描仪、写板等
输出设备:显示器、打印机等。

冯诺依曼的两个重要思想

1.所有数据均采用二进制存储(契合电路,高低电平的特点)
2.数据都保存在存储器中(内存中)

当代计算机的三级缓存

三级缓存与高速缓存(cache)
首先必须明确三级缓存均属于高速缓存
一级缓存:一级缓存通常设置在cpu内部,但是比起寄存器来说还是远一点,因为其放在cpu内部,所以它的空间是很小的,通常为8-16k
二级缓存:二级缓存在CPU之外,因为主板上的空间很大,所以二级缓存比一级缓存大得多,大概是256KB-1MB左右,但是它的速度慢,因为它离CPU比较远。二级缓存通常用作一级缓存与内存的交换空间
三级缓存:其空间更大,但是相应的离cpu也越来越远。
所以从远及近看 CPU〈------〉寄存器〈----》缓存《-----》内存。
缓存中的数据是可以提升的?
比如初始情况下,一个数据位于三级缓存中,但是因为经常使用,所以它会被提升到二级缓存甚至一级缓存,这块很好理解,经常用cpu就让该数据离它更近点。
为了保证CPU访问时有较高的命中率,Cache中的内容应该按一定的算法替换。一种较常用的算法是“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出Cache,提高Cache的利用率。
LRU为操作系统中提供的算法。

操作系统

操作系统的概念

操作系统时配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。其主要作用是管理好这些设备,提高它们的利用率和系统的吞吐量,并为用户和应用程序提供一个简单的接口,便于用户使用
硬件:冯诺依曼中的所有设备
软件:安装软件、卸载软件、升级软件
在系统层面:文件、进程、驱动等

操作系统的组成

操作系统=操作系统内核+一堆应用
操作系统内核:代表某种操作系统的代码的统称。

操作系统作用

操作系统是管理当前设备的软硬件资源软件
管理:先描述,再组织。
这块管理:管理不是像宿管阿姨管理一个宿舍那样,更像是一个leader(校长),操作系统具有**“决策权”**。
对上:给用户一个稳定高效的执行文件。
对下:管理好软硬件资源,提供稳定的软硬件资源。
这里还是以学校举例:把学生比作硬件的话,那么宿管就相当于是驱动程序,而操作系统位于驱动程序之上,等于说驱动程序只是按照操作系统的命令去做事而已。这便是真正的管理者。作为一个leader,统筹全局。

Linux下的操作系统体系

进程

进程概念

进程:进程是程序的一次执行,是系统进行资源分配和调度的一个独立单位。

进程特性

1.动态性。由创建而产生,由调度而执行,由撤销而消亡。
2.并发性。是指多个进程实体同时存在于内存中,且能在一段时间内使进程实体和其他进程实体同时执行。(在不同的时间点,交给处理及处理。在同一时间点,任务不会同时进行)。
这块解释一下并发与并行区别:
并发性在一个处理机上,宏观上有多个进程同时执行的效果,但在微观上,并不是同时执行,只是把时间分为若干段,(类似于时间片轮转算法),使多个进程轮流交替的运行
并行性:指在同一时刻,多个处理机同时处理不同的任务(进程)
3.独立性:进程是一个能独立运行,独立获得资源和独立接受调度的基本单位。前提:建立PCB情况下
4.异步性:进程按独立的,不可预知的速度向前推进。

进程的组成

进程=程序段+数据段+进程控制块(PCB)(PCB常驻内存)

进程与程序区别

1.进程是一个动态的概念,程序是一个静态的概念
2.进程具有并发性,而程序没有
3.进程是资源分配和处理机调度的独立单位,其并发性受系统制约。
4.一个程序,多次执行,对应多个进程,不同的进程可包含同一组程序。
进程:程序 (1:n)

进程控制块

PCB定义:作为进程实体的一部分,记录了操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构。
PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据)称为一个独立运行的基本单位,一个能与其他进程并发执行的进程
作用:
1)PCB标志了程序作为独立运行基本单位。
2)能实现间断性运行方式。这很好理解,比如cpu处理进程使的并发性。当在一段时间内A进程的时间片耗尽时,此时需要记录执行到哪里了(保护现场)。保证了进程下次被分到时间片时的恢复现场。
3)提供了进程管理所需要的信息。PCB中记录了程序和数据在内存或外存的始址指针,找到对应的程序和数据。总的来说,PCB里面保存着执行资源的地址。
4)提供进程调度所需要的信息。比如优先级、程序目前的状态,是在阻塞态还是在S(sleep)状态。
5)实现与其他进程的同步和通信。比如一个程序被分为多个进程,此时后一个所需的资源依赖于前一个进程执行完毕,这就涉及到了进程的同步与通信了,是有顺序的,。要不然你执行你的,我执行我的,这样的出来的值到底是什么!!
注:PCB里面存储的程序和数据均是程序和数据的地址,PCB常驻内存。

Linux下的底层下的组织

明确Linux操作系统底层

Linux系统是以C语言编写的,C语言可以存储多个对象的数据类型的结构是什么,当然是结构体
文件=内容+属性

Linux底层管理进程的结构体(描述)

进程=对应的文件+进程属性
struct task_struct
{

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

从操作系统内核的结构看进程(组织)

前面我们提到过:
管理=描述+组织
描述:前面我们已经给出了描述进程的结构体,那在底层,它是怎么实现组织的?
是通过双向链表的方式,通过增、删、查、改的操作来实现进程的调度。
进程管理:先描述,再组织
将程序跑起来,就相当于将程序加载入内存,将程序输出可视化,

本文标签: 进程概念系统Linux