进程概念

冯诺伊曼体系结构
这里写图片描述
注意:
1.这里的存储器指的是内存
2.不考虑缓存情况,这里的CPU只能对内存进行读写操作,不能访问外设(输入和输出设备)
3.外设输入或输出数据只能通过写入内存或存内存中读取

操作系统(简称OS)
OS 的作用:
1.管理所有的软硬件资源
2.为用户提供一个良好的执行环境
进一步理解,OS 可以被看作是一个管理软硬件的软件,操作系统管理软硬件是通过驱动程序来进行的,不是直接管理
这里写图片描述
计算机管理硬件
1.描述,用结构体
2.组织,用链表或其他的高效数据结构

进程描述-PCB(进程控制块)
进程的信息被放在进程控制块中,Linux操作系统下被称为

task_struct内容

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

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

* fork有两个返回值
* 父子进程代码共享,数据各自开辟空间,私有一份(写时拷贝)
* 进程id(PID)
* 父进程id(PPId)

这里写图片描述
这里写图片描述
总结:
1.由fork创建的新进程称为子进程
2.fork函数调用一次,返回两次

* 子进程返回0,父进程返回子进程的ID

3.子进程数据空间中的内容是父进程的完整拷贝
4.子进程和父进程共享代码空间,但数据空间互相独立
5.父进程与子进程对应的虚拟地址是相同的,但映射到物理地址不相同(注:程序中变量的地址都是虚拟地址)
6.父进程的父进程是不变的

进程的状态
R:运行状态
只有在该状态的进程才能在CPU上运行,同一时刻可能有多个进程处于运行态,这些进程的tast_struct被放入对应CPU的可执行队列中。
S:睡眠状态
进程在等待事件的完成
D:磁盘休眠状态
也称作不可中断的睡眠状态,指的并不是CPU不影响外部硬件中断,而是指进程不影响异步信号。进程通常会等待IO的结束
T:停止状态
向进程发送一个SIGSTOP信号,就会影响该信号而进入TASK_STOPPED状态,向进程中发送一个SIGCONT信号,可以让其从TASK_STOPPED状态恢复到TASK_RUNNING状态。
X:死亡状态
只是一个返回状态,不会在任务列表中看到这个状态。
Z:僵尸状态

僵尸进程
在Linux中,正常情况下,子进程通过父进程进行创建,子进程的结束和父进程的运行是一个异步的过程。(父进程永远不知道子进程什么时候结束),当一个进程结束的时候,其父进程需要调用wait()或waitpid()取得子进程的终止状态。
子进程退出,而父进程没有调用wait或waitpid获取子进程的状态信息,那么子进程描述符仍然保存在系统中。
这里写图片描述
这里写图片描述
僵尸进程的危害:
正常情况下,在每个进程退出时,内核释放该进程的所有资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(进程号,退出状态,运行时间等),直到父进程通过wait或waitpid来取才释放。
如果进程不调用wait或waitpid,保留的信息就不会被释放,其进程号就会一直被占用,但系统所能使用的进程号是有限的,如果大量产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。

孤儿进程

* 孤儿进程是没有父进程的进程
* 父进程先退出,子进程就进入孤儿状态
* 孤儿进程被1号init进程领养,由1号init进程回收

这里写图片描述
这里写图片描述

总结:
任何一个子进程(init除外)在exit()之后,并非马上消失,而是留下一个成为僵尸进程的数据结构,等待父进程的处理。
如果父进程在子进程结束之前退出,则子进程将有init接管,init将会以父进程的身份对僵尸状态的子进程进行处理。
孤儿进程没有危害

查看系统进程
这里写图片描述
UID:执行者的身份
PID:进程的代号
PPID:父进程的代号
PRI:进程可被执行的优先级(值越小越早被执行,默认值为80)
NI:进程的nice值,进程可被执⾏行的优先级的修正数值(Linux下的nice值为19(最低优先级)到-20(最高优先级),默认值为0),一共40个级别

PRI&NI
加入nice值后,PRI(new)=PRI(old)+NI
由于PRI值越小优先级越高,则nice值为负值的时候,优先级就会变高,将会被执行

注意:
nice值不是进程的优先级,而是nice值影响进程的优先级变化
nice值可以理解为进程优先级的修正,用来修正数据

启动进程前调整:nice
调整已存在进程的nice:renice
这里写图片描述
用top命令更改已存进程的nice

环境变量
这里写图片描述
* $:查看本SHELL的PID
* HOME:指定用户的主工作目录
* PATH:指定命令的搜索路径
* SHELL:当前的Shell,通常值是/bin/bash
* HISTSIZE:保存历史命令记录的条数

和环境变量相关的命令
* echo:显示某个环境变量的值
* export:设置一个新的环境变量
* env:显示所有环境变量
* unset:清除环境变量
* set:显示本地定义的shell变量和环境变量

环境变量的组织方式
每一个程序都有一张环境表,环境表是一个字符指针数组,每个指针指向一个一’\0’结尾的环境字符串
这里写图片描述
获取环境变量
通过env查看所有的环境变量
通过程序查看环境变量
这里写图片描述
通过第三方变量environ获取
这里写图片描述
全局变量environ指向环境变量表
环境变量可以被继承下去

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值