免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2638 | 回复: 4
打印 上一主题 下一主题

模式,空间和上下文 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-27 16:21 |只看该作者 |倒序浏览
为了运行UNIX ,计算机硬件至少提供2 种不同的执行模式 具有较高特权的内核态和特权较低的用户态。正如你所想的那样,用户程序在用户态执行,内核功能在内核态执行。内核保护地址空间的某些部分,防止用户态进行访问。此外,某些特权机器指令,如操作存储管理寄存器的指令等,它们只能在内核态执行。许多计算机具有两种以上的执行模式。例如,Intel 80x86 体系结构有四层执行环(rings ofexecution),内特权最高。但 UNIX 只使用了其中的两环。具有不同执行模式的主要原因是
为了保护。由于用户进程在较低的特权级上运行.它们将不能意外地或故意地破坏其他进程或内核。程序错误造成的破坏被局域化,一般不会影响系统中的其他活动或进程。大多数UNIX 实现都使用了虚存系统。在虚存系统中,程序使用的地址不直接对应物理存储器的存储单元。每个进程有自己的虚拟地址空间,对虚存地址的引用通过地址转换表转换到相应的物理单元上。许多系统用页表来实现这些映射表,每一个表项对应进程地址空间的
一页(内存分配和保护的单元,大小固定)。计算机的存储管理单元(MMU)一般有一组寄存器来标识当前运行的进程(也称当前进程)的转换表。在当前进程将CPU 放弃给另一个进程时(一次上下文切换),内核通过指向新进程地址转换表的指针加载这些寄存器。MMU 寄存器是有特权的。只能在内核态才能访问。这就保证了一个进程只能访问自己用户空间内的地
址,而不会访问和修改其他进程的空间。每个进程的虚拟地址空间中固定的部分是内核的正文和数据结构。这部分称为系统空间
(system space),或内核空间(kernel space),它们只能在内核态访问。系统中只有一个内核实例运行,因此所有进程都映射到单一内核地址空间。内核中维护全局数据结构和每个进程的一些对象信息。后者包括的信息使内核可以访问任何进程的地址空间。由于MMU 寄存器中有必要的信息,内核可以直接访问当前进程的地址空间。偶而地内核也须访问非当前进程的
地址空间。而这是无法直接完成的,需通过特殊的临时映射实现。
尽管所有进程都共享内核,但其系统空间是受保护的,进程在用户态是不能访问的。进程不能直接访问内核,而必须通过系统调用接口。当进程调用一个系统调用(system call)时,其执习了了一个特殊的指令序列,使系统进人内核态(被称为模式转换),并将控制权交给内
核。由内核替代进程完成操作。当系统调用完成后,内核执行另一组特征指令将系统返回到用户态(另一个模式转换),控制权返回给进程。。每个进程有两个重要的对象,虽然它们由内核管理,但一般在进程地址空间内实现。它们就是u 区(也称用户区)和内核堆栈(kernel stack)。U 区是一个包含着有关进程的内核感兴趣的数据结构,如进程打开的文件表,标识信息及在进程不运行时所保存的进程寄存器值。进程
是不允许随意更改这些信息的,因此u 区在用户态是不可访问的(某些实现允许进程只读访问,不能更改u 区)。
  UNIX 内核是可重入的(re-entrant),这就是说多个进程可并发参与内核活动。实际上,它们甚至可以并行地执行同一个子程序。当然,实际上某一时刻只有一个进程执行,其他的被阻塞或等待运行。)因此每个进程需要有自已的私有内核栈来记录它在内核中调用的函数的
序列。许多UNIX 的实现都是在每个进程的地址空间内分配内核堆栈,但不允许从用户态访问它。尽管u 区和内核堆栈是属于每个进程空间的实体,但从概念上讲它们是属于内核的。
另一个重要概念是执行上下文(execution context)。内核函数既可以在进程上下文运行,又可以在系统上下文运行。在进程上下文中,内核代表当前进程执行(例如,执行一个系统调用),可以访问和修改进程的地址空间,u 区及其内核堆栈。此外,若进程必须等待资源或设
备活动,内核可以阻塞当前进程。
    内核也必须完成系统级任务,如响应外设中断和重新计算进程优先级。这些任务并不是为了某个特定进程完成的,因此在系统上下文中处理(也称为中断上下文)。当运行于系统上下文时,内核可能不会访问当前进程的地址空间,u 区或内核堆栈。在系统上下文中执行时,
内核不会阻塞,否则就会阻塞一个无辜的进程。在某些情况下,系统中可能没有一个当前进程,如所有进程因等待系统I/O 完成而阻塞。
现在,我们已经说明了用户态与内核态,进程空间与系统空间以及进程上下文和系统上下文之间的区别。用户代码在用户态和进程上下文中运行,并只能访同进程空间。系统调用和异常在内核态而不是在进程上下文中处理,并可访问进程和系统空间。中断处理在内核态和系统上下文运行,只能访问系统空间。

论坛徽章:
0
2 [报告]
发表于 2003-03-01 09:40 |只看该作者

模式,空间和上下文

好文!收藏。

论坛徽章:
0
3 [报告]
发表于 2003-03-05 05:25 |只看该作者

模式,空间和上下文

...

加精哦~

论坛徽章:
0
4 [报告]
发表于 2003-03-05 08:29 |只看该作者

模式,空间和上下文

原帖由 "红袖添香" 发表:
...

加精哦~

支持加精哦.嘿嘿.看来妹妹是水王哈哈

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-03-06 15:22 |只看该作者

模式,空间和上下文

不错,想必你对unix是比较熟悉了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP