深入理解操作系统--进程(1)

概述

这一章,主要讲的是进程的概念,即程序执行的一个实例。在linux源代码中,通常把进程称为任务。

然后写了这一章的重点,先讨论进程的静态特性,然后描述内核如何进行进程切换;最后两节研究如何创建和撤销进程。

进程,轻量级进程和线程

写点这一节有趣的事情,如下:
进程有生命周期,被产生,可以产生一个或多个子进程,最终都要灭亡。每个进程只有一个父亲。
从内核观点看,进程的目的就是担当分配系统资源(CPU时间,内存等)的实体。
一个进程由几个用户线程组成,每个线程都代表进程的一个执行流。
从内核观点看,多线程应用程序仅仅是一个普通的进程。多线程应用程序多个执行流的创建,处理,调度整个都是在用户态进行的。

进程描述符

内核管理进程,必须对每个进程所做的事情进行清楚的描述。使用进程描述符来对进程的一些内容进行管理。
进程描述符都是task_struct类结构,如下:
task_struct
书里边的图
对于一个进程来说,要了解进程的状态,比如:
可运行状态,可中断的等待状态,不可中断的等待状态,暂停状态,跟踪状态,僵死状态,僵死撤销状态这几种状态,代码如下:
进程状态

linux进程四要素

  • 有一段程序供其执行;
  • 有进程专用的系统堆栈空间;
  • 在内核有task_struct数据结构;
  • 都独立的存储空间,拥有专有的用户空间。

如果只有前三条,则称为“线程”。如果完全没有用户空间,就称为“内核线程”;而如果共享用户空间映射就称为“用户线程”。

创建进程

在linux中,新进程是从一个已经存在的进程中复制出来的,内核使用静态数据结构造出0号进程,0号内核线程分叉生成1号内核线程和2号内核线程。1号内核线程完成初始化以装载用户程序,编程1号进程,其他进程都是1号进程或者它的子孙进程分叉生成的。

linux3个系统调用创建新的进程

  • fork(分叉):子进程是父进程的一个副本,采用写时复制技术。
  • vfork:用于创建子进程,之后子进程立即调用execve以装载新程序的情况,为了避免复制物理页,父进程会睡眠等待子进程装载新程序。现在fork采用了写时复制技术,vfor没什么速度优势,废弃了。
  • clone(克隆):可以精确地控制子进程和父进程共享哪些资源。这个系统调用的主要用处是可供pthread库用来创建线程。clone是功能齐全的函数,参数多使用复杂,fork是clone的简化函数。
    来看下代码,如下图:
    fork
    vfork
    clone

do_fork函数

do_fork()函数负责处理clone(),fork(),vfork()系统调用。来看看do_fork()函数的执行流程。如下图:
do_fork()
_do_fork()
可以看到,具体的核心处理在copy_process()函数中。

copy_process函数

先来看下这个函数的主要流程,如下图:
copy_process函数流程
代码贴一点,能看到多少,看多少吧,然后顺着代码配合上边的图,理解下整个流程。
copy_process()

撤销进程

进程终止的一般方式是调用exit()库函数,该函数释放c函数库分配的资源,执行程序所注册的每个函数,并结束从系统回收进程的那个系统调用。

小结

本篇只是简单的写了进程这一章,毕竟,后边还有2章写的是这个概念,后边慢慢写。随时补充新的内容。感兴趣,可以一起学习学习。OK,结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值