当前位置: 首页 > news >正文

企业门户网站模板 下载亚马逊雨林资料

企业门户网站模板 下载,亚马逊雨林资料,鄂尔多斯网站建设,asp.net 当前网站Content 一、什么是进程1. 进程的概念2. 进程的描述 - 进程控制块#xff08;PCB#xff09;3. Linux下的进程 二、进程状态1. 教科书中的进程状态运行状态阻塞状态挂起状态 2. Linux下的进程状态R#xff08;running#xff09;- 运行状态S#xff08;sleeping) - 睡眠状… Content 一、什么是进程1. 进程的概念2. 进程的描述 - 进程控制块PCB3. Linux下的进程 二、进程状态1. 教科书中的进程状态运行状态阻塞状态挂起状态 2. Linux下的进程状态Rrunning- 运行状态Ssleeping) - 睡眠状态Ddisk sleep- 磁盘休眠状态Tstopped- 停止状态ttracing stop- 追踪暂停状态Xdead- 死亡状态 两种特殊的进程 1. 僵尸进程2. 孤儿进程 三、进程的优先级1. 什么是优先级2. 为什么要有优先级3. Linux中优先级的特点 四、进程的其他概念 [!abstract] 进程的学习 认识冯诺依曼系统 操作系统概念与定位 深入理解进程概念了解PCB 学习进程状态学会创建进程掌握僵尸进程和孤儿进程及其形成原因和危害 了解进程调度Linux进程优先级理解进程竞争性与独立性理解并行与并发 理解环境变量熟悉常见环境变量及相关指令, getenv/setenv函数 理解C内存空间分配规律了解进程内存映像和应用程序区别, 认识地址空间 学习进程创建,fork/vfork 学习到进程等待 学习到进程程序替换, 微型shell重新认识shell运行原理 学习到进程终止,认识$? 一、什么是进程 1. 进程的概念 课本概念进程就是被加载到内存中的程序或者被运行起来的程序就叫做进程操作系统内核观点进程可执行程序进程控制块PCB。 2. 进程的描述 - 进程控制块PCB 进程控制块PCB (Process Control Block)是操作系统中用于描述进程的工具其中包含的是进程属性的集合。 Linux操作系统下的PCB是 task_struct它是Linux内核的一种数据结构其内容可以分为如下几类 标示符: 描述本进程的唯一标示符用来区别其他进程。状态: 任务状态退出代码退出信号等。优先级: 相对于其他进程的优先级。程序计数器: 程序中即将被执行的下一条指令的地址。内存指针: 包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针上下文数据: 进程执行时处理器的寄存器中的数据。IO状态信息: 包括显示的I/O请求,分配给进程的IO设备和被进程使用的文件列表。记账信息: 可能包括处理器时间总和使用的时钟数总和时间限制记账号等。其他信息 3. Linux下的进程 描述起来用结构体struct struct task_struct { //进程的所有属性... ...//进程对应的代码和数据的地址... ...//下一个进程的地址struct task_struct* next; };在 Linux 系统中进程控制块Process Control Block简称 PCB通常是用 C 语言中的 struct 结构体来实现的。这个结构体包含了与进程相关的各种信息比如进程状态、进程 ID、优先级、CPU 寄存器值、内存映射信息等。在 Linux 源代码中这个描述进程的结构体通常被命名为 task_struct。 课本上称之为PCBprocess control blockLinux操作系统下的PCB是: task_struct task_struct 是 PCB 的一种 组织起来用链表或其他高效的数据结构 在 Linux 中所有进程都通过一个 task_list 双向循环链表来连接。每个 task_struct 结构体都有一个 tasks 成员通常是 list_head 类型该成员用于将它插入到全局的 task_list 链表中。 /** Simple doubly linked list implementation.** Some of the internal functions (__xxx) are useful when* manipulating whole lists rather than single entries, as* sometimes we already know the next/prev entries and we can* generate better code by using them directly rather than* using the generic single-entry routines.*/struct list_head {struct list_head *next, *prev; };进程可执行程序 (exe) task_struct对象内核对象 二、进程状态 1. 教科书中的进程状态 在普适的操作系统层面即站在操作系统学科的角度来说进程状态可能有如下几种运行、挂起、阻塞、新建、就绪、等待、挂机、死亡其中最重要也是最难理解的几种状态分别是运行、阻塞、挂起。 运行状态 操作系统为了合理分配CPU以及各种硬件资源也为了更好的调度各个进程会为CPU创建一个进程队列为每一个硬件都创建一个等待队列而让某一个进程处于运行状态本质上就是将该进程对应的PCB放入CPU的运行队列中然后再将PCB中维护进程状态的变量修改为相应的值比如0 因为进程PCB里面有进程的各种属性以及进程对应的代码和数据的地址所以CPU从运行队列中取出PCB后可以根据该PCB来得到进程的各种数据和指令然后执行相应运算 所以进程处于运行状态并不一定意味着该进程此刻正在被运行只要该进程处于CPU的运行队列中即可。所以运行状态就是进程处于执行中或者在运行队列中等待执行。(注CPU是纳秒级的芯片运算速度非常快所以只要进程处于CPU的运行队列中我们就可以认为该进程正在被运行) 阻塞状态 和CPU一样我们计算机中的各种硬件也是十分有限的但是需要使用这些硬件资源的进程却有很多比如很多进程都需要向磁盘中写入数据又或者要通过网卡发送数据但是一个磁盘或者一个网卡在同一个时刻只能为一个进程提供服务那么如果此时有其他运行中的进程需要使用该硬件资源操作系统就会将该进程的PCB放入硬件的等待队列中等待硬件来为我提供服务。 上面这种由于访问某种硬件需要进行等待的状态就被称为阻塞状态阻塞状态本质上就是将进程的PCB从CPU的运行队列中剥离出来放入硬件的等待队列中然后将PCB中维护进程状态的变量修改为相应的值比如1待该进程获得对应的对应的硬件资源以后再将该进程放入CPU的运行队列中。 注并不是只有等待硬件资源进程才会处于阻塞状态一个进程等待另一个进程就绪、一个进程等待某种软件资源就绪等都会处于阻塞状态。 挂起状态 上面我们学习了阻塞状态处于阻塞状态的进程由于需要等待某种资源所以它对应的代码和数据在短期内并不会被执行此时它们仍存在在内存中就相当于浪费了内存资源而如果当前操作系统处于高IO的情况下内存空间不足操作系统就会选择将这些处于阻塞状态的进程对应的代码和数据拷贝一份存放到磁盘中然后释放内存中那一份从而节省出内存空间 上面这种由于内存空间不足操作系统将在等待资源的进程对应的代码数据放到磁盘中以节省内存空间的状态就被称为挂起状态挂起状态不会移动进程的PCB只会移动进程对应的代码和数据。 注挂起进程并不是释放进程因为该进程对应的PCB仍然处于某硬件的等待队列中当该进程获得对应的资源以后操作系统仍然可以将该进程对应的代码和数据从磁盘加载到内存中来继续运行其本质是对内存数据的唤入唤出同时阻塞不一定挂起挂起也不一定阻塞也可能是新建挂起、就绪挂起甚至是运行挂起。 [!attention] 阻塞和挂起的区别 与阻塞等待状态不同在挂起状态下进程通常不是在等待某种资源或条件的满足而是被显式地暂停了可以通过相应的信号例如在Linux中的 SIGCONT来继续执行。 区别 触发原因: 阻塞通常是因为进程在等待某些系统资源或事件。挂起通常是由用户或管理员明确要求的。 可控性: 阻塞状态通常是自动的由系统内核管理。挂起状态通常是可以被用户或管理员控制的。 可中断性: 阻塞状态可能是可中断或不可中断的。挂起状态总是可以通过 SIGCONT 信号来解除的。 持续时间: 阻塞状态持续到所等待的条件得到满足。挂起状态持续到进程收到一个 SIGCONT 信号。 [!quote] 总结 进程状态改变的本质是进程对应的 PCB (task_struct 对象) 处于不同设备的运行队列/等待队列中。 2. Linux下的进程状态 Linux内核源代码中对进程状态的定义如下 /* * The task state array is a strange bitmap of * reasons to sleep. Thus running is zero, and * you can test for combinations of others with * simple bit tests. */ static const char * const task_state_array[] {R (running), /* 0 */S (sleeping), /* 1 */D (disk sleep), /* 2 */T (stopped), /* 4 */t (tracing stop), /* 8 */X (dead), /* 16 */Z (zombie), /* 32 */ };Rrunning- 运行状态 它表明进程PCB在运行队列里虽然在运行队列并不意味着进程一定在运行中但是因为CPU非常快所以只要进程处于CPU的运行队列中我们就可以认为该进程正在被运行。 Ssleeping) - 睡眠状态 味着进程在等待事件完成这里的睡眠有时候也叫做可中断睡眠interruptible sleepLinux下的睡眠状态其实就是我们上面所说的阻塞状态。 注我们使用 ps axj 指令查看进程状态只能查看进程某一时刻的状态而外设的速度是要远远低于CPU的所以我们可以发现虽然 process 也在执行加法运算但是我们每次查询时进程基本都处于阻塞状态因为进程99%的时间都在等待硬件资源就绪只有1%的时间在进行加法运算以及执行打印代码。 Ddisk sleep- 磁盘休眠状态 有时候也叫不可中断睡眠状态uninterruptible sleep在这个状态的进程通常会等待IO的结束。 上面我们提到当内存空间不足的时候操作系统会将一部分进程挂起来节省资源但是如果内存空间严重不足挂起已经解决不了问题的时候操作系统就会主动杀掉某些进程 那么这里就出现了一个问题万一操作系统把某些非常重要的进程杀掉了怎么办比如当前有一个进程需要向磁盘写入一批数据这批数据是10万名用户一年的转账记录非常重要该进程访问磁盘让磁盘帮它写入数据在磁盘写数据的时间段内该进程是属于阻塞状态的因为它要等待磁盘返回给它一个结果即是否写入成功而一旦该进程被操作系统杀掉且恰好磁盘写入失败了磁盘将写入结果反馈给该进程发现无人应答磁盘就只能将该部分数据丢弃然后为其他进程提供服务此时这部分十分重要的用户数据就丢了。 为了防止这种情况的发生Linux设计出了深度睡眠 (D) 状态处于深度睡眠状态的进程既不能被用户杀掉也不能被操作系统杀掉只能通过断电或者等待进程自己醒来。 注深度睡眠一般只会在高IO的情况发生下且如果操作系统中存在多个深度睡眠状态的程序那么说明该操作系统也即将崩溃了。 Tstopped- 停止状态 可以通过发送 SIGSTOP 信号给进程来停止T进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。 列出kill的选项 ttracing stop- 追踪暂停状态 追踪暂停状态是一种特殊的暂停状态进程处于此状态表示该进程正在被追踪比如 gdb 调试进程。 Xdead- 死亡状态 这个状态只是一个返回状态死亡状态代表着一个进程结束运行该进程对应的PCB以及代码和数据全部被操作系统回收我们不会在任务列表里看到这个状态。 Linux下的进程状态本质上就是进程PCB中的一个变量 #define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 #define __TASK_STOPPED 4 #define __TASK_TRACED 8 /* in tsk-exit_state */ #define EXIT_ZOMBIE 16 #define EXIT_DEAD 32 /* in tsk-state again */ #define TASK_DEAD 64 #define TASK_WAKEKILL 128因此进程状态变化的本质 更改PCB中的status变量将 PCB 连入不同的运行队列中 两种特殊的进程 1. 僵尸进程 什么是僵尸进程 在Linux中当一个进程完成它的执行但还没有被其父进程清理也就是读取其退出状态时它就会变成僵尸进程。这种情况通常发生在父进程在其子进程结束之前就结束了。在这种情况下子进程的状态信息会被保留在系统中以便父进程在以后的某个时候读取。 用代码说明 #include stdio.h #include unistd.h #include stdlib.h #include sys/types.hint main() {int id fork();if(id 0){while(1){printf(我是父进程pid: %d, ppid: %d\n, getpid(), getppid());sleep(1);}}else if(id 0){while(1){printf(我是子进程pid: %d, ppid: %d\n, getpid(), getppid());sleep(1);}}else {perror(fork fail);exit(-1);}return 0; } kill 掉子进程之后由于父进程中没有对子进程的退出状态代码进行读取所以子进程变成了 Z 状态并且子进程后面还提示了 defunct (失效的不再使用的)此时如果父进程一直不对不对子进程进行读取那么子进程就会变成僵尸进程。 僵尸进程的危害 僵尸进程本身并不占用任何系统资源如CPU时间或内存因为它们已经停止执行。然而每个僵尸进程的PCB还存在于操作系统进程表中这可能会消耗有限的系统资源。如果有大量的僵尸进程它们可能会耗尽进程表的空间导致新的进程无法启动。此外如果父进程不正确地处理子进程的退出可能会导致僵尸进程的数量持续增加。 2. 孤儿进程 孤儿进程是指在其父进程执行完成或被终止后仍继续运行的一类进程。这些孤儿进程将被init进程进程号为1所收养并由init进程对它们完成状态收集工作。 [!warning] 两个细节 父进程退出后并没有变成Z状态 当一个进程结束时它的进程描述符会立即消失而是等待父进程读取其退出状态。在这个等待过程中进程被称为僵尸进程Z状态。如果父进程先于子进程退出子进程就会被init进程接管子进程结束后init进程会负责读取其退出状态因此子进程不会变成僵尸进程。 子进程被领养后变成了后台进程 在UNIX系统中后台进程是指与终端脱离关系独立运行的进程。当父进程退出子进程被init进程接管后子进程就会变成后台进程。这是因为init进程是在系统启动时由内核创建的它不依赖于任何终端因此被它接管的子进程也会变成后台进程。 ps进程状态后面的 号代表着一个进程是前台进程没有 号就代表是后台进程 三、进程的优先级 1. 什么是优先级 优先级和权限不同权限决定的是一件事情能不能做优先级是在权限允许的前提下该事情先做还是后做 2. 为什么要有优先级 资源是有限的内存中有很多进程都要占用资源但是资源是有限的所以我们需要指定优先级来合理的分配资源 3. Linux中优先级的特点 Linux 中优先级的表示与维护通过两个变量 PRI (priority) 和 NI (nice) 来完成每个进程默认的 PRI 都是 80NI 都是 0我们可以通过修改 NI 的值来调整进程的优先级NI 的改动范围为 [-20, 19]PRI 与 NI 的和越小进程的优先级就越高 我们也可以通过如下步骤来修改进程优先级 (将进程优先级调高可能需要 sudo 权限) 输入top -- 输入r -- 输入进程id -- 输入NI值修改进程优先级的本质就是修改进程的nice值 四、进程的其他概念 进程还有一些其他概念 竞争性系统进程数目众多而CPU资源只有少量甚至1个所以进程之间是具有竞争属性的(进程为了高效完成任务更合理竞争相关资源便具有了优先级)独立性多进程运行需要独享各种资源多进程运行期间互不干扰(每个进程的PCB以及代码数据都是独立的一个进程的死亡不会影响其他进程包括父子进程子进程崩溃并不会影响父进程)并行多个进程在多个CPU下分别、同时进行运行这称之为并行并发多个进程在一个CPU下采用进程切换的方式在一段时间之内让多个进程都得以推进称之为并发。(我们用的电脑一般都是并发只有一个CPU)
http://www.tj-hxxt.cn/news/135969.html

相关文章:

  • 设计新颖的网站建站手机端网站自动弹出营销qq
  • 大连商城网站建设石景山网站建设制作公司
  • 查看网站浏览量岳阳网站建设联系方式
  • 申请域名后怎样建设网站wordpress 4.0 中文版
  • 网站建设公司 - 百度广州app客户端开发
  • 怎么在word里做网站十大电商代运营公司
  • 苏州建网站制作费用多少钱宿州网站开发
  • 西安高端网站设计公司网站建设推广哪里好
  • 可以做装修效果图的网站有哪些创业加盟
  • 网站开发按钮图片素材优秀个人网站
  • 上海建设网站平台网站推广员怎么做
  • 如何做网站搜索功能产品设计考研学校推荐
  • 做网站采集什么文章好计算机网站开发实现总结
  • 关于asp_sql网站开发的书籍西地那非片的正确服用方法
  • 厦门网站开发培训济南做网站公司
  • 湖州建设局网站 项目验收流程深圳互联网企业名单
  • 网站推广营销效果政务网站网上调查怎么做
  • 婚纱摄影网站模版整站源码安徽省建设工程信息网官网是什么网站
  • 漯河网站建设ewordpress 图片链接下载
  • 北京天恒建设工程有限公司网站外包做网站的会给你什么
  • 建筑网官网大全旅游企业seo官网分析报告
  • 新网站怎么做论坛推广百度喜欢什么样的网站
  • 网站开发代码规范一站式网站建设服务商
  • 网站备案分为几种网站建设收费标准精英
  • 写作网站排名网络服务有哪些
  • 如何在网站上添加备案号余姚公司做网站
  • 网站建设及wordpress文章怎么加分享
  • 网站怎么做是满屏沈阳网站外包公司
  • 广州中新知识城开发建设网站千华网鞍山门户网站
  • 网站建设和电子商务的关系网站被备案能建设