【linux】进程

1.程序和进程
    程序是指编译好的二进制文件,在磁盘上不占用系统资源(cpu、内存、打开的文件、设备、锁...)
    进程是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程)。
    程序仅仅只是一堆代码,进程指的是程序运行的过程。
程序和进程的区别:
    1>进程是动态的,程序是静态的;
    2>进程有一定的生命周期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为一个独立单位得到操作系统的认可。
    3>一个程序可以对应多个进程,但一个进程只能对应一个程序。
    4>进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块三部分组成,而进程是一组有序的指令集合。
2.并发
    在操作系统中,一个时间段中有多个进程都处于已启动运行到运行完毕之前的状态。但任一个时刻点上仍只有一个进程在运行。
单道程序设计
    所有进程一个一个排对执行。若A阻塞,B只能等待,即使CPU处于空闲状态。而在人机交互时阻塞的出现是必然的。所以这种模型在系统资源利用上及其不合理,在计算机发展历史上存在不久,大部分便被淘汰了。
多道程序设计
    在计算机内存中同时存放几道相互独立的程序,他们在管理程序控制下,相互穿插的运行。多道程序设计必须有硬件基础作为保证。
    在多道程序设计模型中,多个进程轮流使用CPU(分时复用CPU资源)。而当下常见的CPU为纳秒级,1秒可以执行大约10亿条指令。由于人眼的反应速度是毫秒级,所以看似同时在运行。
    1s=1000ms,1ms=1000us,1us=1000ms
3.虚拟内存与物理内存映射关系
    虚拟储存器的容量限制:主存容量+辅存(硬盘)容量
    物理内存:在应用中,真实存在的,插在主板内存槽上的内存的容量的大小。从本质上说,物理内存是代码和数据在其中运行的窗口。
    虚拟内存:使程序认为他拥有连续的可用的内存(一个连续完整的地址空间),实际上他通常是被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要是进行数据交换。

 MMU的一个page是4KB,MMU以4KB为单位进行映射空间。

两个程序即使虚拟地址相同,MMU也会将物理空间进行分开映射。

4.进程控制块PCB

        1.进程id:系统中每个进程有唯一的id。在C语言中用pid_t类型表示,其实pid是一个非负整数。

        2.进程的状态:有初始态、就绪态、运行态、挂起态、停止态等状态。

        3.进程切换时需要保存和恢复的一些CPU寄存器。

        4.描述虚拟地址空间的信息。

        5.描述控制终端的信息。

        6.当前工作目录

        7.umask掩码

        8.文件描述符表,包含很多指向file结构体的指针。

        9.信号相关的信息

        10.用户id和组id。

        11.会话和进程组

        12.进程可以使用的字眼上限

       5.进程状态模型

        

 引起进程状态转换的具体原因:

        就绪状态 ——当前进程已分配到除CPU以外的所有必要的资源后,只能在获得处理机便可以及执行,这时的状态称为就绪状态。同时处于就绪状态的多个进程排成就绪队列。

        执行状态——指进程已获得处理机,其程序正在执行。

        阻塞状态——进程因发生某种时间而暂停执行时的状态,进程的执行受到阻塞,顾称这种状态为阻塞状态。

 

         创建状态:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处的状态为创建状态。

          就绪状态:进程已经准备好,分配到所需资源,只要分配到CPU就能够立即运行。

        执行状态:进程处于就绪状态被调度后,进程进入执行状态。

        阻塞状态:正在执行的进程由于某些事件而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用。

        终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法执行。

5.环境变量

        是指在操作系统中用来指定操作系统运行环境的一些参数。通常具备以下特征:

        1.字符串(本质)2、有统一的格式:名=值[:值]  3.值用来描述进程环境信息

        存储形式:与命令行参数类似

        使用形式:与命令行参数类似

        加载位置:与命令行参数类似。位于用户区,高于stack的起始位置

        引入环境变量表:需声明环境变量。

常见的环境变量

        PATH:可执行文件的搜索路径

        SHELL:当前shell,它的值通常是/bin/bash.

                echo   $SHELL

        TERM:当前终端类型。在图形界面终端下它的值通常是xterm,终端类型决定了一些程序的输出显示方式。

               echo $TERM

        LANG:变量定义了linux系统的主语系环境

        HOME:当前用户主目录的路径

         命令:env     -------查看所有环境变量的值。

6.进程的介绍和创建

        进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进程资源分配和调度的基本单位,是操作系统结构的基础。

        fork函数通过系统调用创建一个与原来进程几乎完全相同的进程。

        进程创建后,系统给新创建的子进程分配资源。可以通过进程号pid来区分父进程和子进程。父进程返回的是子进程的pid,子进程返回的是0.

四个函数:

        getpid() 获取当前进程ID,

        getppid()获取当前进程的父进程ID,

        getuid()获取当前进程实际用户ID;

        getgid()获取当前进程使用用户组ID

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
	printf("hello world\n");
	printf("hello world\n");
	printf("hello world\n");
	printf("hello world\n");
	pid_t pid;
	pid=fork();
	if(pid == -1)
	{
		perror("fork error\n");
	}
	else if(pid == 0)
	{
		printf("hello subzi progress getpid=%d,getpid=%d\n",getpid(),getppid());
	}
	else
	{

		printf("hello numfu progress getpid=%d\n",getpid());
	}
	printf("beybey!!\n");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值