linux 进程原理,Linux进程管理之1 进程概念与操作系统基础原理

计算机硬件层面之上是操作系统,狭义的操作系统主要指系统内核,内核有以下作用:进程管理、文件系统、网络管理、内存管理、驱动程序、安全功能。内核可以将用户无法操作的底层硬件接口进行抽象并封装为用户可以操作的接口,称为系统调用(system call),当用户需要操作硬件时就可以向内核发起系统调用完成响应操作。

372880

程序员编写的代码其实就是一条条指令构成,程序代码在执行过程中,如果这条指令用户自身有权限去执行,则可以直接执行。如果需要执行特权指令,例如操作硬件,由于特权指令只能由内核执行,用户没有权限执行;所以此时,运行的程序需要做软中断,然后向内核发起系统调用,内核执行系统调用的代码,完成后将执行结果返回给执行的程序,然后再继续执行后面的指令。 程序执行遇到特权指令,就必须发起系统调用,内核在运行系统调用代码时,程序是处在等待状态。执行系统调用时,程序工作在内核空间(内核态);运行用户可以执行的指令时,程序工作在用户空间(用户态)。 一个有效率的程序,它不应该浪费太多时间在系统调用。一般CPU应该有70%的时间在执行用户代码(即工作在用户态),30%的时间用来执行系统调用(工作在内核态)。因为只有用户自己的程序代码才能发挥生产力,而内核代码并不直接发挥生产力。

CPU是通过给不同的程序分配时间片(time slice)来完成多任务运行,给每一个程序分配独立的时间片。在执行过程中,很产生很多中间状态数据,例如执行到第几条指令,接下来CPU该去取第几条指令,这些数据存放在CPU的指令指针寄存器中。如果此时发生了进程切换,寄存器的数据就会被新的进程所覆盖,等到下次再执行相同程序时又得从头再来,这是所不能接受的。所以一旦程序在一个时间片内没有办法执行完毕,CPU需要把程序执行的中间状态的数据保存起来例如当前运行到哪个指令,在内存中取数据取到哪个地址,这称为保存现场。保存完成后,在下一个时间片执行另一个进程。当重新恢复执行当前进程时,需要把保存的中间数据装载到CPU中,称为恢复现场。保存和恢复现场需要执行内核代码完成(即工作在内核空间,消耗CPU时间)。

Linux系统管理机制类似于中央集权,内核是最高统治者,进程都要在内核的管理下调度执行。正常情况下,进程都不可能逃脱内核的控制,除非内核中存在漏洞。当进程试图执行特权指令时,CPU会触发一个软中断,然后唤醒内核,由内核负责处理;一旦触发中断就必须由内核接管一切。

编写好的程序代码存放在磁盘上是静态的,放在那里只是干巴巴的程序文件。而进程是程序的活动实体,程序只有运行起来才能称之为进程。一个进程从创建到结束,是有自己的生命周期。每一个文件都有自己的元数据即属性,与之类似,进程也有自己的属性,例如进程名称、进程号、运行了多长时间、使用哪颗CPU、占用多少内存等等。内核对进程的调度需要追踪查看进程的属性,所以内核为每一个进程创建能够追踪其属性的数据结构。在C语言中,数据存储有一种方式叫做结构体,结构体是用来存储内容的一个特定的组织机制或组织格式。而内核就为每一个进程创建结构体,内核存储进程信息的固定格式称为task struct;当我们去查看系统上的进程信息时,就是遍历每个进程的task struct。这些task struct是通过链表的方式进行存储。何为链表?例如第一个结构体数据的结尾部分指向第二个结构体起始地址,而第二个结构体的结尾部分又指向第三个结构体的起始地址,这样连接起来像一个数据链似的就称为链表。在Linux系统上众多进程的task struct组成的链表称为任务列表(task list)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值