操作系统原理——系统进程简析

本文深入解析操作系统中的进程概念,包括进程与程序的区别、进程状态转换(三态与五态模型)、进程描述符task_struct、进程同步与互斥的锁机制和信号量,以及进程间通信的各种方式如共享内存、管道等。通过对线程的介绍,阐述进程内部的执行机制。理解进程需结合实际编程经验,如Unix C编程。
摘要由CSDN通过智能技术生成

1、程序(program)是这样一系列指令的所构成的集合,程序大多数时候被存储为可执行的文件。进程是程序的一个具体实现,是执行程序的过程。同一个程序可以执行多次,每次都可以在内存中开辟独立的空间来装载,从而产生多个进程。不同的进程还可以拥有各自独立的IO接口。

使用ps命令来查询正在运行的进程,比如ps -eo pid,comm,cmd,执行结果:

(-e表示列出全部进程,-o pid,ppid,comm,cmd表示我们需要PID,COMMAND,CMD信息)

       PID(processIDentity)是一个16位的整数,每一个进程都有一个唯一的PID来作为自身标识。进程当中的pid号的分配是从0—32767之间的,其中0—299的进程号是分配给demo(守护进程)的,剩下的pid号是分配给普通进程的。第二列的ppid是本进程的父进程号。第三列的COMMAND是这个进程的简称。第四列的CMD是进程所对应的程序以及运行时所带的参数。

       所有的进程也构成一个以init为根的树状结构,用pstree命令可以显示整个进程树的结构(这里不再展示)。

       当子进程终结时,它会通知父进程,并清空自己所占据的内存,并在kernel里留下自己的退出信息。父进程在得知子进程终结时,有责任对该子进程使用wait系统调用。这个wait函数能进行内存清空处理。但是,如果父进程早于子进程终结,子进程就会成为一个孤儿(orphand)进程。孤儿进程会被过继给init进程,init进程也就成了该进程的父进程。init进程负责该子进程终结时调用wait函数。

       当然,一个糟糕的程序也完全可能造成子进程的退出信息滞留在kernel中的状况(父进程不对子进程调用wait函数),这样的情况下,子进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。

进程的创建、销毁、执行等详细过程在此不做讨论,在学习unix c编程后,在代码编写的过程中会有深入的了解

在Linux中,线程是一种特殊的进程,多个线程之间可以共享内存空间和IO接口。(进程之间内存是独有的,不会共享)

 

2、进程的基本状态转换(三态和五态)

   三态模型:在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化。进程一般有3种基本状态:运行、就绪和阻塞。

(1)运行:当一个进程在处理机上运行时(占据cpu),则称该进程处于运行状态。处于此状态的进程的数目小于等于处理器的数目——如果是单核处理器,则当前只有一个进程处于运行态;如果是多核(例如n核),则有m(0<m<n+1)个进程处于运行态。

特别注意:多核处理器可能在同一时间执行一个进程(可以认为是多行代码一块执行,每个核执行一条)

(2)就绪:当一个进程获得了除处理机以外的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值