深入探究内核:模式、定时器与并发机制
1. 内核模式与用户模式
在操作系统中,存在不同的CPU执行模式。像MS - DOS这类操作系统,始终在单一CPU模式下运行,而类UNIX操作系统则采用双模式来有效实现时间共享。在Linux系统里,CPU要么处于受信任的内核模式,要么处于受限的用户模式。所有用户进程都在用户模式下执行,而内核自身则在内核模式下运行。
内核模式代码能够无限制地访问整个处理器指令集、全部内存和I/O空间。若用户模式进程需要这些特权,就必须通过系统调用,借助设备驱动程序或其他内核模式代码来传递请求。不过,用户模式代码允许发生页面错误,而内核模式代码则不允许。
在2.4及更早的内核中,只有用户模式进程可以进行上下文切换,被其他进程替换。内核模式代码可以独占处理器,直到以下两种情况发生:
- 主动放弃CPU。
- 发生中断或异常。
随着2.6版本引入内核抢占机制,大多数内核模式代码也能够进行上下文切换了。
2. 进程上下文与中断上下文
内核通过进程上下文和中断上下文的组合来完成有用的工作。为用户应用程序发出的系统调用提供服务的内核代码,代表相应的应用程序进程运行,这种情况被称为在进程上下文执行。而中断处理程序则在中断上下文中异步运行。进程上下文与中断上下文相互独立。
在进程上下文中运行的内核代码是可抢占的。然而,中断上下文总是会运行到完成,不可抢占。因此,在中断上下文中执行代码存在一些限制,具体如下:
- 不能进入睡眠状态或放弃处理器。
- 不能获取互斥锁。
- 不能执行耗时的任务。
- 不能访问用户空间的虚拟内存。
超级会员免费看
订阅专栏 解锁全文
2381

被折叠的 条评论
为什么被折叠?



