操作系统概念01.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 多对一模型 将许多用户级线程映射到一个内核线程 Solaris2 * 一对一模型 将每个用户线程映射到一个内核线程 Windows NT,windows2000,OS/2 * 多对多模型 多路复用了许多用户级线程到同样数量或更小数量的内核线程上。 允许OS创建足够数量的内核线程 UNIX,IRIX,HP-UX 第三节:若干线程问题 * 若干线程问题 fork() 和 exec()系统调用的语义 线程取消 信号处理 线程池 线程特定数据 * 系统调用fork和exec 如果程序中的一个线程调用fork,那么新进程会复制所有线程还是新进程只有单个线程? fork后紧接着调用exec的情况 fork后不调用exec的情况 * 线程取消 线程取消是在线程完成之前来终止线程的任务。 线程的取消可在如下两种情况下发生: 异步取消(Asynchronous cancellation):立即终目目标线程 延迟取消(Deferred cancellation):目标线程不断地检查它是否应终止,这允许目标线程有机会按着有序方式来终止自己。 取消点(cancellation point) * 信号处理(Signal Handling) 信号在UNIX系统中用做通知进程某个特定事件已经发生。 不管信号是同步或异步的,所有信号具有同样模式 信号是由特定事件的发生所产生的 产生的信号要发送到进程 一旦发送,信号必须要加以处理 缺省信号处理 & 用户自定义的信号处理程序 signal(sig,function) int sig; void (*func) ( ) 其中sig用于指定信号的类型,sig为0则表示没有收到任何信号,其它信号类型见下页表格 Unix的信号 产生信号的条件 1. 用户在终端 按下某些键时,终端驱动程序会发送信号给进程,例如Ctrl-C 产生 SIGINT 信 号, Ctrl-\ 产生 SIGQUIT 信号, Ctrl-Z 产生 SIGTSTP 信号。 2. 硬件异常产生信号,这些条件由硬件检测到并通知内核,然后内核向当前进程发送适当的信号。例如当前进程执行了 除以0 的指令 3. 一个进程调用kill(2) 函数可以发送信 号给另一个进程。 4. 可以用kill(1) 命令发送信号给某个 进程, 如果不明确指定信号则发送 SIGTERM 信号,该信号的默认处理动作是终止进程。 5. 当 内核检测到某种软件条件发生时也可以通过信号通知进程,例如闹钟超时产生SIGALRM 信 号,向读端已关闭的管道写数据时产生 SIGPIPE 信号。 * Simple program to catch SIGUSR1 #includestdio.h #includeunistd.h #includesignal.h static void sig_usr(int); Int main(void) { if (signal(SIGUSR1, sig_usr) == SIG_ERR) printf(cant catch SIGUSR1); for ( ; ; ) pause(); } static void sig_usr(int signo) /* argument is signal number */ { if (signo == SIGUSR1) printf(received SIGUSR1\n); } * 多线程信号的接受 单线程模型,信号总是发送给进程 对于多线程进程,信号应被发送到哪里? 发送信号到信号所应用的线程 如:同步信号 发送信号到进程内的每个线程 如:CTRL+C 发送信号到进程内的某些线程 发送到进程中不拒绝它的第一个线程 规定一个特定线程以接收进程的所有信号 Solaris 2 * * 线程池 线程池的主要思想是在进程开始时创建一定数量的线程,并放入到池中坐以等待工作。 优点 通常用现有线程处理请求要比等待创建新的线程要快 线程池限制了在任何时候可存在线程的数量。 例如:银行储蓄柜台的工作方式 * 线程特定数据 允许每个线程拥有自己的数据 当你没有线程创建过程的控制权时,线程特定数据就非常重要(如,使用线程池的时候) 如,对于事务处理系统,可能需要通过独立线程以处理各个请求。而且每个事务都有一个惟一的标识符。为了让每个线程与其惟一标识符相关联,可以使用线程特定数据。 第四节:线程库 * Pthread线程 Pthread是POSIX标准(IEEE 1003.1c)定义的线程创建和同步API。 API只定义了线程库的行为,而不是实现。不同的线程库其实现允许不同。 通常,实现Pthread规

文档评论(0)

you-you + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档