1. 计算机的概念是什么?
- 计算机是一个
非常广泛的概念
,大到占用数层楼的用语科学计算的超级计算机,小到手机上的嵌入式芯片都可以被称为计算机。 - 虽然它们的外形、结构和性能都千差万别,但至少它们都有
计算
这个概念。 - 本质上他们的
基本概念和工作原理
都是一样的。
2. 对于程序开发者来说,计算机多如牛毛的硬件设备中,有三个部件最为关键,分别是什么?
- 中央处理器 CPU
- 存储器(包括内存和磁盘)
- I/O 设备
3. 什么是 SMP?为什么会出现 SMP?SMP 中CPU 越多,运算速度就越快吗?
- SMP(对称多处理器,Symmetrical Multi-Processing)。
- 因为 CPU 频率到达 4GHz 时,就达到目前工艺的物理极限了,想要继续提高,就需要从
核心数
上做文章。 -
理论上讲,增加 CPU 的数量就可以提高运算速度,并且理想情况下,速度的提高与 CPU 的数量成正比
,但是实际上并非如此,因为我们程序并不能分解成若干个完全不相干的子问题
。就比如一个女人可以花 10 个月生出一个孩子,但是 10 个女人并不能在一个月就生出一个孩子一样。 - 当然很多时候多处理器是非常有用的,最常见的情况就是在大型的数据库、网络服务器上,它们要同时处理大量的请求,而这些
请求直接往往是相对独立的
,所以多处理器就可以最大效能地发挥威力。
4. 计算机系统软件体系结构采用一种层的结构
,因此有句名言是什么?
- “计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”
- 这句话
几乎概括
了计算机系统软件体系结构
的设计要点
,整个体系结构从上到下
都是按照严格的层次结构设计
的。

Mac OS X 的层次结构设计
5. 如何不让 CPU 打盹( 充分利用 CPU),有三大阶梯式的进步,分别是什么?
-
多道程序(Multiprogramming)
:编写一个监控程序,当某个程序暂时无须使用 CPU 时,监控程序就把另一个正在等待 CPU 资源的程序启动,使得 CPU 能够充分利用起来。缺点:
调度策略太粗糙,程序之间不分轻重缓急,有些紧急的任务,很可能需要等待很长时间才有机会分配到 CPU 资源。 -
分时系统(Time-Sharing System):
每个程序运行一段时间以后都会主动让出
CPU 给其他程序,使得一段时间内每个程序都有机会运行一小段时间。缺点:
如果一个程序在进行一个很耗时的计算,一直霸占着 CPU 不放,那么操作系统也没办法,其他程序都只有等着,整个系统看过去好像是死机了一样。系统中任何一个程序死循环都会导致系统死机。 -
多任务系统(Multi-tasking System):
① 操作系统接管了所有的硬件资源,并且本身运行在一个受硬件保护的级别。 ② 所有的应用程序都以进程(Process)的方式运行在比操作系统权限更低的级别,每个进程都有自己独立的地址空间,使得进程之间的地址空间相互隔离。 ③ CPU 由操作系统统一进行分配,每个进程根据进程的优先级的高低都有机会得到 CPU。 ④ 这种 CPU 的分配方式即所谓的抢占式(Preemptive),操作系统可以强制剥夺 CPU 资源并且分配给它认为目前最需要的进程。⑤ 如果操作系统分配给每个进程的时间都很短,即 CPU 在多个进程间快速地切换,从而造成了很多进程都在同时运行的假象,目前几乎所有现代操作系统都是采用这种方式。
6. 内存不够怎么办(充分利用内存)?理解直接分配物理地址的缺点?物理内存、虚拟内存?如何隔离、如何分段、如何分页?虚拟地址到物理地址的转换由谁转换?
-
直接分配物理地址
:假设我们计算机有 128MB 内存,程序 A 需要 10MB,程序 B 需要 100 MB,程序 C 需要 20MB。如果我们需要同时运行 A 和 B,那么比较直接的做法是将内存的前 10MB 分配给程序 A,10MB ~ 110MB 分配给程序 B。这样分配主要有三个问题 ① 地址空间不隔离 ② 内存使用率低 ③ 程序运行时的地址不确定 -
物理地址:
是实实在在的,存在于计算机中,而且对于每一台计算机来说只有唯一的一个。比如 32 位的机器,但是只装了 512MB 的内存,那么其实物理地址真正有效部分只有 0x00000000 ~ 0x1FFFFFFF -
虚拟地址:
指的是虚拟的,人们想象出来的地址空间,其实它并不存在,每个进程都有自己独立的虚拟空间,而且每个进程只能访问自己的地址空间,这样就有效地做到了进程隔离。 -
如何隔离:
借助虚拟地址和进程,达到每个程序有自己独立的地址空间、有自己的 CPU,好像整个程序占有了整个计算机而不用关心其他程序。 -
如何分段(Segmentation):
基本思路是把一段与程序所需要的内存空间大小的虚拟空间映射到某个地址空间。缺点:
① 如果内存不足,被换入换出到磁盘的都是整个程序②程序很多数据其实在一个时间段内都是不会被利用的,最终分段被粒度
更小的分页
所取代 -
如何分页(Paging):
基本方法是把地址空间人为的等分成固定大小的页,每一页的大小由硬件决定。 -
虚拟地址到物理地址的转换由谁转换:
在也映射的模式下,CPU 发出的是 Virtual Address,即我们的程序看到的是虚拟地址。经过 MMU(Memory Management Unit)转换以后就变成了 Physical Address。一般 MMU 都集成在 CPU 内部了,不会以独立的部件存在。