进程基本概念

1.task_struct结构体:
在Linux下描述进程的结构体为task_struct结构体。它将会被装载到RAM(内存)里并且包含着进程的信息。
task_struct内容分类:
.标识符:描述本进程的唯一标识符。
.状态:任务状态,退出代码等。
.优先级:
.:程序计数器:程序中即将被执行的下一条指令的地址。
.内存指针:程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
.上下文数据:进程执行时处理器的寄存器中的数据。
**.**IO状态信息:显示的IO请求,分配给进程的I/O设备和被进程使用的文件列表。
.记账信息:包括处理器时间总和,使用的时钟数总和,时间限制,记账号。
.其他信息


2.僵尸进程
僵尸进程(zombie):当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程。
僵尸进程的危害:
因为退出状态本身是要用数据维护,也属于进程基本信息,所以保存在PCB中,而Z状态一直不退出,PCB就需一直维护。而父进程创建了子进程而不回收会造成内存泄漏孤儿进程:父进程提前退出,子进程称为孤儿进程。孤儿进程被1号init进程领养和回收。


3.进程
.进程的特征:
<1>.动态性:进程的实质是进程实体的执行过程,进程实体有一定的生命周期。
<2>.并发性:多个进程在一个CPU下采用进程切换的方式,在一段时间内,让多个进程进行快速调度。
<3>并行性:多个进程在多个CPU下分别同时进行运行。
<4>.独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰。
<5>.竞争性:系统进程数目多,但CPU资源少,所以进程之间存在竞争性。
进程的调度:因为在多个进程在一个CPU下采用进程切换的方式,在一段时间内,让多个进程进行快速调度。

1)时间片轮调度算法(RR):给每个进程固定的执行时间,根据进程达到的先后顺序在单位时间片
内执行,执行完成后便调度执行下一个进程执行,时间片轮转调度不考虑进程等待时间和执行时间,
属于抢占式调度。优点是兼顾长短作业;缺点是平均等待时间较长,上下文切换较费时。使用于分时
系统。
2)先来先服务调度算法(FCFS):根据进程到达的先后顺序执行进程,不考虑等待时间和执行时间,
会产生饥饿现象。属于非抢占式调度,优点是公平,实现简单;缺点是不利于短工作
3)优先级调度算法(HPF):在进程等待队列中选择优先级最高的来执行。
4)多级反馈队列调度算法:将时间片轮转和优先级调度相结合,把进程优先级分成不同的队列,先
按优先级调度,优先级相同的,按时间片轮转。优点是兼顾长短作业,有较好的相应时间,可行性强,
适用于各种作业环境。
5)高响应比优先级调度算法:根据“响应比=(进程执行时间+进程等待时间)/进程执行时间”这个
公式得到的响应比来进行观察。高响应比会随着等待事件增加而变大,优先级会提高,能够避免饥饿
现象。优点是兼顾长短作业,缺点是计算机响应开销大,适用于处理系统———


4.
setenv函数
作用:改变或增加环境变量
相关函数getenv,putenv,unsetenv,首先要说明的是,通过此函数并不能添加或修改shell进程的环境变量,或者说通过setenv函数设置的环境变量只在本进程,而且是本次执行中有效。如果在某一次运行程序时执行了setenv函数,进程终止再次运行该程序,上次的设置是无效的,上次设置的环境变量是不能读到的。
参数value则为变量内容,参数overwrite用来决定是否要改变已存在的环境变量。注释stdlib.h在Linux和windows中略不同,比如setenv函数是用在linux中的,在Windows中没有6.setenv函数而用putenv来代替。
定义函数:int setenv(const char *name,const char *value,int overwrite);
函数说明setenv函数用来改变环境变量或增加环境变量的内容,参数name为环境变量名称字符串,参数value则为变量的内容,参数overwrite用来决定是否要改变已存在的环境变量。如果没有此环境变量,则无论overwrite为何值均添加此环境变量。若此环境变量存在,overwrite不为0时,原内容会被改为参数value所指的变量内容,当overwrite为0时,则参数会被忽略。返回值执行成功则返回0,有错误发生时,返回-1

export
功能说明:设置或显示环境变量。

语  法:export [-fnp][变量名称]=[变量设置值]

补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。

参  数:
 -f  代表[变量名称]中为函数名称。
 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
 -p  列出所有的shell赋予程序的环境变量。
 


5.虚拟内存
很多内存管理策略都需要同时将多个进程放在内存中,以便执行这些进程,这些策略都需要在进程执行之前将整个进程放在内存中。而虚拟内存技术允许执行进程不必完全放在内存中,这样我们就可以运行比物理内存大的程序,使得程序员不受内存存储的限制。
一个项目的程序虽然非常多,但是其实有一部分程序并不经常执行,或者基本上没有执行过,比如说异常处理、错误处理等,那么这些程序使得我们可以只需要加载需要执行的部分,从而减少了内存使用。
从而,我们可以构造一个大的虚拟内存空间,然后将其映射到较小的物理内存。这个大的虚拟内存空间存储我们进程的所有信息,而当执行进程时,我们只加载需要执行的部分,需要什么再加载什么。这里就需要采用一定的技术,比如按需调页、页面置换、帧分配等,使得进程的执行可以在虚拟内存和物理内存之间进行协调,完成整个程序的执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值