|
38 | 38 | 行的进程数目最多不超过CPU数目,因此内核会按照短的时间间隔在不同的进程之间切换 |
39 | 39 | (用户是注意不到的)。内核借助于CPU的帮助,负责进程之间进行切换。内核还必须确 |
40 | 40 | 定如何在在现存进程之间共享CPU时间。重要进程得到的CPU时间多一点,次要进程得到的 |
41 | | -少一点,确定那个进程运行多长时间的过程成为调度。 |
| 41 | +少一点,确定那个进程运行多长时间的过程称为调度。 |
42 | 42 |
|
43 | 43 | linu对进程采用了一种层次系统,每个进程都依赖于一个父进程。内核启动init程序作为 |
44 | | -第一进程,该进程负责进一步的系统初始化操作,因此init是进程数的根,所有的进程都 |
| 44 | +第一进程,该进程负责进一步的系统初始化操作,因此init是进程树的根,所有的进程都 |
45 | 45 | 直接或间接起源自该进程。 |
46 | 46 |
|
| 47 | +创建新进程的两种机制:fork和exec |
47 | 48 |
|
| 49 | +fork可以创建当前进程的一个副本,父进程和子进程只有PID(进程ID)不同。linux使用 |
| 50 | +了一种叫做写时复制(copy on write)的级数来是fork操作更高效,主要的原理是将内 |
| 51 | +存复制操作延迟到父进程或子进程向某内存页面写入数据之前,在只读访问的情况下父进 |
| 52 | +程和子进程可以公用同一内存页。 |
48 | 53 |
|
| 54 | +exec是将一个新程序加载到当前进程的内存中并执行。旧程序的内存页将刷出,其内容将 |
| 55 | +替换为新的数据。然后开始执行新程序。 |
| 56 | + |
| 57 | +线程:本质上一个进程可能有若干线程组成,这些线程共享同样的数据和资源,但可能执 |
| 58 | +行程序中不同的代码路径。线程通常也称为轻量级进程。 |
| 59 | + |
| 60 | +linux用clone方法创建线程。其工作方式类似与fork,但启用了精确的检查,以确认哪些 |
| 61 | +资源与父进程共享,哪些资源为线程独立创建。这种细粒度的资源分配扩展了一般的线程 |
| 62 | +概念,在一定成都上允许线程与进程之间的连续转换。 |
| 63 | + |
| 64 | +命名空间:linux中对命名空间的支持被集成到了许多子系统中。这使得不同的进程可以 |
| 65 | +看到不同的系统视图。如linux进程ID中有唯一表示的全局变量,启用命名空间之后,以 |
| 66 | +前的全局资源可以具有不同的分组。每个命名空间可以包含一个特定的PID集合,或可以 |
| 67 | +提供文件系统的不同视图,在某个命名空间中挂载的卷不会传播到其他命名空间中。现在 |
| 68 | +最大的用处莫过于在容器上的应用了,人们不必在为每个用户准备一台物理计算机,而是 |
| 69 | +通过称为容器的命名空间建立系统的多个视图。从容器内部看来这是一个完整的linux系 |
| 70 | +统,而且与其他容器没有交互,这样事实上一台物理机器可以同时运转许多这个的容器实 |
| 71 | +例,有助于更有效地使用资源。与完全虚拟化解决方案(如KVM)相比,计算机上只需要 |
| 72 | +运行一个内核来管理所有的容器。 |
| 73 | + |
| 74 | + |
| 75 | +内存管理 |
| 76 | +-------- |
| 77 | + |
| 78 | + |
| 79 | +地址空间的最大长度与实际可用的物理内存数量无关,这被称为虚拟地址空间。 |
49 | 80 |
|
50 | 81 | ============================================================================== |
51 | 82 | ============================================================================== |
0 commit comments