- 1、本文档共83页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux操作的系统及程序设计4
第四讲 多进程编程 初步掌握Linux环境下进程和线程的概念、相关系统调用使用、多进程、线程编程基本方法,了解进程间通信的主要方式。 进程(process): 处于执行期的程序及其所包含资源的总称 程序:可执行程序代码 资源:打开文件、挂起信号、地址空间、数据段等线程(thread) 进程中活动的对象 有独立的程序计数器、进程栈及一组进程寄存器节省主存、减少管理开销、快速切换 从形态角度 一个进程可包含一个或多个线程从调度角度 进程是资源分配的基本单位 线程是处理器调度的独立单位从虚拟化角度 进程提供两种虚拟机制虚拟处理器:进程独享处理器的假象虚拟内存:进程拥有系统内所有内存资源的假象 线程之间可共享虚拟内存,但各自拥有独立虚拟处理器对Linux系统而言,线程只是一种特殊的进程! ●用户空间 可执行映象:用户进程本身的程序和数据 进程堆栈:进程运行用户程序时使用的堆栈 进程控制/管理信息:如进程控制块等。●系统空间: 内核被映射到所有进程的系统空间中 只允许进程在核心态下访问 进程只能通过系统调用转换为核心态后,才能访问系统空间 进程上下文 系统提供给进程处于动态变化的运行环境系统上下文 系统完成自身任务时的运行环境,内核在系统上下文中执行时不会阻塞 进程描述符数据结构:struct task_struct定义位置:include/linux/sched.h 进程描述符向量结构数据结构:task[NR_TASKS]定义位置: include/linux/sched.h定义格式struct task_struct *task[NR_TASKS] = {init_task}#define NR_TASKS 512说明:全局变量NR_TASKS记录系统可容纳进程数,默认大小是512 pid_t pid:内核通过pid标识每个进程 pid与进程描述符之间有严格的一一对应关系 pid_t实际上是一个int类型,范围:0 ~ 32767 最大值修改:/proc/sys/kernel/pid_max生成新pid:get_pid()获取进程pid1)ps命令(用法?)2)访问/proc/pid3)getpid()?sys_getpid() ●实验1:完成教科书P66创建进程实验。●如何实现等待指定的子进程结束?●如何实现一个父进程创建多个(比如10个)子进程? ●实践 调式更正教科书P49-50的示例程序,使其可以运行,真正实现一个程序启动另一个程序后自身仍然在运行。 ●实验2:完成教科书P67创建线程实验。 阅读教科书P61-64内容,了解线程同步的基本方法。 ●实验3:完成教科书P68利用多线程实现单词统计的实验。 1 1)有一int型全局变量g初始值为0; 2)创建线程1,打印“thread1”,并将g设置为1 3)创建线程2,打印“thread2”,并将g设置为2 4)线程2需要在线程1退出后才能退出 5)主线程在检测到g从1变为2,或者从2变为1的时候退出(提示:在主线程中使用pthread_cond_wait,在线程1和线程2中发出signal) * mutex变量使用示例—修改前 Linux线程编程技术 * mutex变量使用示例—修改前 运行结果 main线程和function线程是交替运行,都可对run_now进行操作 Linux线程编程技术 * mutex变量使用示例—修改后 Linux线程编程技术 定义work_mutex变量,实现互斥访问 * mutex变量使用示例—修改后 Linux线程编程技术 * mutex变量使用示例—修改后 Linux线程编程技术 * mutex变量使用示例—修改后 Linux线程编程技术 * mutex变量使用示例—修改后 运行结果 Linux线程编程技术 * 条件变量 互斥锁的缺点 通过控制存取数据来实现线程同步 线程不断轮询条件是否满足(忙等),资源消耗大 条件变量 利用线程间共享的全局变量实现同步 条件变量使线程睡眠等待特定条件出现(无需轮询) 使用方法 通常条件变量和互斥锁同时使用 一个线程因等待“条件变量的条件成立”而挂起 另一个线程使“条件成立”(发送“条件成立”信号) Linux线程编程技术 * 条件变量典型使用步骤 申明/初始化需要同步的全局数据/变量(如count) 申明和初始化一个条件变量对象 申明和初始化对应的mutex 创建若干进程,并运行之 Linux线程编程技术 * 条件变量检测 条件
您可能关注的文档
- Java的面向对象程序设计第11章_输入流与输出流1.ppt
- Java程序设计实的验指导书2016年版本.doc
- Java程序设计期末考的试题.pdf
- JAVA第一次上的课笔记.docx
- java类加载器与的反射.docx
- JAVA第9章 输的入输出.ppt
- JAVA简单邮件发送客户的端程序设计.doc
- Java程序编写编译与的运行软件.pptx
- JAVA系统开发的规范.doc
- java类库和常用的类简介.ppt
- 第18讲 第17课 西晋的短暂统一和北方各族的内迁.docx
- 第15讲 第14课 沟通中外文明的“丝绸之路”.docx
- 第13课时 中东 欧洲西部.doc
- 第17讲 第16 课三国鼎立.docx
- 第17讲 第16课 三国鼎立 带解析.docx
- 2024_2025年新教材高中历史课时检测9近代西方的法律与教化含解析新人教版选择性必修1.doc
- 2024_2025学年高二数学下学期期末备考试卷文含解析.docx
- 山西版2024高考政治一轮复习第二单元生产劳动与经营第5课时企业与劳动者教案.docx
- 第16讲 第15课 两汉的科技和文化 带解析.docx
- 第13课 宋元时期的科技与中外交通.docx
文档评论(0)