【深入理解Linux内核】《第一章 绪论》笔记

1.商用Unix操作系统包括:

   - AT&T公司开发的(System V Release 4) SVR4、

   - 加州伯克利分校发布的4.4BSD

   - Dec公司(现属于HP)的Digital Unix

   - IBM公司的AIX

   - HP公司的HP-UX

   - Sun公司的Solaris   - Apple公司的Mac OS X

所有商业版本都是SVR4或4.4BSD的变体,并且都趋向于遵循某些通用标准:如IEEE的POSIX(Portable Operating Systems based on Unix)和X/Open的CAE(Common Application Environment)。

2.除了Linux外,还有一些其他的类Unix也是开放源码的,如FreeBSD,NetBSD, OpenBSD.

3.Linux可以运行的平台,处x86外,还有HP的Alpha,Intel的Itanium,AMD的AMD64,Power PC以及IBM的zSeries.

4.用户态和内核态:

当一个应用程序在用户态下执行时,它不能直接访问内核数据结构或内核的程序。然而,当应用程序在内核态下运行时,这些限制不再有效。有以下几种方式激活内核例程:

  • 进程调用系统调用。
  • 正在执行进程的CPU发出一个异常(exception),内核代表产生异常的进程处理异常。
  • 中断信号
  • 内核线程被执行。

5.当内核暂停一个进程的执行时,就把几个相关处理器寄存器的内容保存在进程描述符中。

  • 程序计数器(PC)和栈指针(SP)寄存器
  • 通用寄存器
  • 浮点寄存器
  • 包含CPU状态信息的处理器控制寄存器(处理器状态字,Processor Status Word)
  • 用来跟踪进程对RAM访问的内存管理寄存器。

6.可重入内核:如果一个硬件中断发生,可重入内核能挂起当前正在执行的进程,即使这个进程处于内核态。

提供可重入的一种方式是编写函数,以便这些函数只能修改局部变量,而不能改变全局数据结构,这样的函数叫可重入函数。但是可重入内核不仅仅局限于这样的可重入函数,可重入内核可以包含非重入函数,并且利用锁机制保证一次只有一个进程执行一个非重入函数。

我的理解:所谓可重入,指的就是在内核态执行了一半,被打断,完了又可以继续执行。

7.单块结构内核和微内核

大部分Unix内核是单块结构:每一个内核层都被集成到整个内核程序中,并代表当前进程在内核态下运行。

相反,微内核操作系统只需要内核有一个很小的函数集,通常包括几个同步原语、一个简单的调度程序和进程间通信机制。运行在微内核之上的几个系统进程实现从前操作系统级实现的功能,如内存分配程序、设备驱动程序、系统调用处理程序等等。

 8.进程地址空间

每个进程运行在他的私有地址空间。在用户态下运行的进程涉及到私有栈、数据库和代码区。当在内核态运行时,进程访问内核的数据库和代码区,但是用另外的私有栈。因为内核是可重入的,因此几个内核控制路径(每个都与不用的进程相关)可以轮流执行。在这种情况下,每个内核控制路径都引用它自己的私有内核栈。

如果用一个程序(比如说编辑程序)有几个用户同时使用,则这个程序只被装入内存一次,其指令由所有需要他的用户共享。当然,其数据不被共享,因为每个用户将有独立的数据。这种共享的地址空间由内核自动完成以节省内存。

9.自旋锁

自旋锁与信号量非常相似,但没有进程链表;当一个进程发现锁被另一个进程锁着时,它就不停地“旋转”,执行一个紧凑的循环指令直到锁打开。

原文地址:https://www.cnblogs.com/wisehead/p/3813238.html