- 1、本文档共152页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 Linux进程管理及进程通信 刘 循 4.1 Linux进程及描述 4.1.1 Linux系统中的进程 Linux操作系统是多进程并发环境,进程和进程之间的关系呈现为多级结构,如图4.1所示。 4.1.2 进程状态及其转换 Linux操作系统采用如下的进程状态描述进程的动态过程: (1) 就绪(Running):进程处于预备运行状态,等待系统分配处理器; (2) 核心态运行(Running):进程运行在操作系统核心空间。在用户程序中如果有系统函数调用,则进程状态会从用户态执行转入核心态执行。任何一个进程都不可能抢占一个处于核心态执行的进程,除非处于核心态执行的进程正从核心态到用户态切换; (3) 用户态运行(Running):进程运行在用户空间。处于用户态运行的进程可被抢占; (4) 可中断睡眠(interruptible):由于进程CPU运行时发生了需要等待I/O事件或进程通信时需要相互配合而等待,此时,进程会在内存中处于一种相对静止状态。如果等待的事件已经完成,此时进程可被唤醒,被唤醒后的进程转入内存就绪状态; 4.1.2 进程状态及其转换 4.1.3 进程映像与进程上下文 一个程序经过编译和链接之后,成为可执行文件。操作系统核心将可执行文件作为进程的实体装入内存时,进程实体分为正文段、数据段和堆栈段。 正文段由程序中的代码构成; 数据段由程序运行所用到的数据构成; 堆栈段由函数调用传递参数、保留现场、存放返回地址和局部变量构成。 在程序运行过程中,堆栈段由操作系统创建并不断刷新。堆栈段分为核心堆栈和用户堆栈两种。核心堆栈为进程在核心态下运行的工作区;用户堆栈为进程在用户态下运行的工作区。 struct task_struct { long state; long counter; long priority; long signal; struct sigaction sigaction[32]; long blocked; int exit_code; unsigned long start_code; unsigned long end_code; unsigned long end_data; unsigned long brk; unsigned long start_stack; long pid; long father; long pgrp; long session; long leader; unsigned short uid; unsigned short euid; unsigned short suid; unsigned short gid; unsigned short egid; unsigned short sgid; long alarm; long utime; long stime; long cutime; long cstime; long start_time; unsigned short used_math; int tty; unsigned short umask; struct m_inode * pwd; struct m_inode * root; struct m_inode * executable; unsigned long close_on_exec; struct file * filp[NR_OPEN] ; struct desc_struct ldt[3] ; struct tss_struct tss }; main() { int pid,ppid; int p_catch( ),c_catch; /* 设置父进程的SIGUSR1 */ signal(SIGUSR1,p_catch); /* 系统函数调用fork()生成子进程 */ switch (pid=fork()) { case –1: printf(“fail fork\n”); exit(1); case 0: /* 设置子进程的信号SIGUSR1 */ signal(SIGUSR1,c_catch) /* 得到父进程标示符 */ ppid=getppid(); for(;;)
您可能关注的文档
最近下载
- 实验四 PCR基因扩增.ppt
- 中国农村的市场和社会结构.ppt VIP
- 超市供货方案.docx VIP
- GB_T 43652-2024城市和社区可持续发展 韧性城市指标.docx VIP
- 2022年12月贵州省第三人民医院第二次公开招聘工作人员18日至20日(一)笔试参考题库含答案解析.docx
- 小学英语_【课堂实录】 Is there a gym around教学设计学情分析教材分析课后反思.doc
- 2024(部编版)历史七年级上册第三单元 大单元教学课件.pptx
- 解读《中华人民共和国学前教育法》 (1).pptx VIP
- 2024年10月中国出口信用保险公司浙江分公司营业部招考1名人员笔试历年参考题库附带答案详解.docx
- 中华人民共和国学前教育法解读.pptx VIP
文档评论(0)