144 典型支持多核的操作系统.pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
144 典型支持多核的操作系统

1.4.4 型支持多核的操作系统 虽然多核技术是近两年才兴起,但是操作系统对多核的基本支持并不难解决。传统的通用 的操作系统都是支持多任务执行的,对唯一的一个计算核心通过分时处理,即把CPU 的运 算时间划分成长短基本相同的时间片,轮流分配给各个任务使用,从而实现单个CPU 执行 多个任务的能力。 对于多核(片上多处理器)这种新的体系架构,操作系统并不需要多少修改就已经能够 好支持了,从软件角度来看,多核处理器和多路处理器(SMP )是一样的,所有针对单核 多处理器的软件优化方式都可以用在多核处理器系统上。比如windows NT 之后的Windows 系列操作系统,其中可以支持 SMP 的都可以支持多核。而对于 Linux 操作系统内核,其 SMP 版本的内核能够很好的支持多核CPU ,Linux 2.0 内核是第一个支持对称多处理器硬件 的内核,在近10 年的发展进程中,尤其从 1999 年到现在,Linux 对多处理器的支持越来越 受到重视。 在早些时候,Linux2.0 内核通过使用一种粗粒度的锁来保证系统的完整性,其原则就是: 一个正在内核态运行的进程除非交出控制权或者要求进入睡眠,否则不能被另一个欲进入 内核态的进程打断。也就是说在任意时刻只能有一个处理器是运行内核态的操作系统代码。 这是一种安全而易于实现的方式,不过这种方式对于充分利用多处理器的性能存在着很明 显的不足。在 Linux 以后改进的版本中,操作系统内核 用了一种细粒度的锁来支持这种 多处理器的体系机构。通过把操作系统的内核代码划分为临界区的方式,在保证系统完整 性的前提下,提升了操作系统利用多处理器的性能优势。 不管是WindowsNT 操作系统还是Unix 的一些商业版本,如Solaris,AIX 等以及开源的Linux 操作系统,都 用一种核心级线程和用户级线程两种线程的模型,操作系统的调度在核心 态完成,这样调度器可以专注于核心态线程在处理器上的调度。 在2.6 版本的Linux 中,提出了一种新的O (1)的进程调度器,此调度器可以更好的支持 SMP 系统。它的优势就是在平衡了多个CPUs 的负载均衡的同时又能有效的兼顾cache 的 有效性。在传统的调度过程中,当某进程从一个CPU 迁移到另一个CPU 上的时候,在原 CPU 上的cache 内容即为失效,这将延迟任务在新的CPU 上访问内存的时间延迟。 Linux 2.6 内核设计为给每个CPU 建立一个就绪运行队列,并把就绪任务划分为140 个优先 级,高100 个优先级用于实时任务,低40 个优先级用户普通任务。并给每个就绪任务一段 时间片,当任务把时间片用完后转移到另一个期满就绪队列并重新分配时间片,等到原活 动就绪队列的所有任务的时间片均用完之后启用期满就绪队列来体会活动就绪队列。这样, 调度器提供了一个各个任务公平使用CPU 的机会,并实现了任务和CPU 的绑定。通过给 每一个CPU 设立单独的任务队列,可以有效的实现系统中各个CPUs 的负载均衡。 为了支持SMP 系统,在操作系统启动阶段,把CPUs 分为BSP 和AP 两种类型,由于BIOS 代码并不是支持多线程的,所以在SMP 中,系统必须让所有AP 进入中断屏蔽状态,不与 BSP 一起执行BIOS 代码。为了达到这一目的,可以利用两种手段: 1、利用系统硬件本身进行处理; 2 、系统硬件与BIOS 程序一起处理。 在后一种方法中,BIOS 程序将其它 AP 置于中断屏蔽状态,使其休眠,只选择 BSP 执行 BIOS 代码中的后继 分。BIOS 要同时完成对APIC 以及其他与MP 相关的系统组件初始 化过程,并建立相应的系统配置表格,以便操作系统使用。操作系统在BSP 上完成内核加 载,操作基本初始化工作后,通过使用处理器间中断系统(IPI )BSP 初始化各个 AP ,最 后让各个AP 运行idle 进程。最后BSP 创建 1 号init 进程,由init 进程完成最后的系统启 动工作。 在中断处理上,为了支持 SMP,在硬件上需要APIC 中断控制系统的支持。Linux 操作系 统的SMP 版本和UP 版本有所不同,对于UP 版本,宏Cli (关中断)和Sti (开中断)就 是简单的ch 和sti 指令;而对于SMP 版本,内核不仅要禁止本地CPU,还要暂时避免其它 CPU 处理IRQ (中断请求),宏cli 和sti 实际上是对函数_global_cli

文档评论(0)

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

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

版权声明书
用户编号:8140007116000003

1亿VIP精品文档

相关文档