linux操作的系统及程序设计4.ppt

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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() 获取进程pid 1)ps命令(用法?) 2)访问/proc/pid 3)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线程编程技术 * 条件变量检测 条件

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档