分类【操作系统】


7
Nov 11

存储管理机

1.存储管理机

在单任务计算机系统里,主存被划分为两块:一块装操作系统(内核),一块装应用程序。系统主存被单一的应用进程独占,没有存储管理的需求。但在多任务计算机系统上,装应用程序的那块主存则必须进一步划分数块,一块装一个应用程序。操作系统负责动态划分主存,分配主存给应用程序和回收应用程序释放的主存,这个任务叫存储管理(memory management)。负责管理存储器的操作系统子系统,我们称之存储管理子系统,统称[存储管理机]。

[存储管理机]的管理效率关系到整个多任务系统的性能。例如,如果系统主存只能装少量几个应用程序,而当主存中全是需频繁读写慢速IO设备的应用程序时,CPU频繁被闲置的同时,可能有其它就绪的应用程序因为没有被装入主存而被闲置,CPU资源没有被得到高效利用。 Continue reading →


24
Jun 10

编译程序与操作系统的关系

和很多程序员一样,编译器到目前为止对我还存在一些让我迷惑的地方。比如编译器与操作系统的关系,编译器与CPU的关系,动态链接器从哪查找共享库等。让人困惑的原因有几,第一是编译器的功能角色特殊,编译器是生成程序的程序;第二是编译过程变得越来越复杂[注],一支编译器支持多种程序语言、支持共享库、编译优化,编译与链接可分开等;第三,操作系统的介入。本文试着从第三点——操作系统介入编译过程后对编译器的影响,看看操作系统与编译器有什么关系。

注:编译过程变复杂源于计算机应用变复杂。例如应用程序项目越来越庞大,功能越来越多;为了管理大项目,拆分源程序文件为多个;为了提高程序的性能,目标程序文件的链接期被延迟到运行前;为了程序的灵活安装和升级,引入各种脚本工具,如make,configure(shell)。

Continue reading →


9
Jun 10

Linux内核具体体系结构之虚拟文件系统

3.3 Virtual File System

3.3.1 Goals

Linux被设计成支持驱动多种不同物理设备的现代操作系统。注意,即便是同一种的硬件设备也可能存在多种不同的接口,比如硬盘有PATA、SATA、SCSI、 USB等不同接口(KEMIN:注意接口与总线的区别)。除了支持不同的物理设备接口外,Linux还支持各种不同的逻辑文件系统( logical file systems),这个功能有助于Linux与其它的操作系统共存和互操作。【虚拟文件系统】泛化和囊括了【外设输入输出】和【逻辑文件系统】功能,实现以下一些“伟大”目标:

  • * Multiple hardware devices – provide access to many different hardware devices
  • * Multiple logical file systems – support many different logical file systems
  • * Multiple executable formats – support several different executable file formats (like a.out, ELF, java)
  • * Homogeneity – present a common interface to all of the logical file systems and all hardware devices
  • * Performance – provide high-speed access to files
  • * Safety – do not lose or corrupt data
  • * Security – restrict user access to access files; restrict user total file size with quotas

Continue reading →


9
Jun 10

Linux内核的概念体系结构

2.3 Overview of the Kernel Structure

下图展示了Linux内核的五个子系统之间的关系,箭头由依赖子系统指向被依赖的子系统:

Figure 2.2: Kernel Subsystem Overview

从图中可以看出来,【进程调度子系统】是内核的核心子系统:其它子系统都对【进程调度子系统】有依赖,因为其它子系统都有暂停(suspend)和恢复(resume)进程的功能需要。通常,某子系统会在等待硬件操作而暂停进程,尔后在操作完成后恢复进程。例如,当进程发一条网络消息后,网络接口可能需要暂停进程,直到硬件成功地完成信息的发送。在消息被发出后,网络接口返回一个代码表示操作的成功与否,然后恢复进程。其它子系统(内存管理子系统、虚拟文件系统、进程互通信子系统)都有类似的原因而依赖于进程调度子系统。
Continue reading →


8
Jun 10

Solaris的线程模型

Solaris实现了一种不一般的多层的线程模型,这种线程模型为开拓处理器性能提供有效且灵活的方案。

KEMIN: 应用程序功能复杂化使程序具有很好的并发性,而一开始操作系统实现的是多进程模型,但当多进程的模型的实现代价超出并发带来效益时,人们开始改造这种并发模型,线程概念及线程模型出现。

多线程构架

Solaris2.X引入了四个线程相关的概念:

  • 进程(process):这是直接引用原来的UNIX的进程概念,包括用户地址空间、堆栈和进程控制块;
  • 用户级线程(User-level threads)用户级线程是通过在进程地址空间内的线程库实现的,这种线程是内核不可见的。
  • 轻量进程(Lightweight processes)一个轻量进程可以看成是用户级线程到内核线程之间的映射。每个轻量进程可以把一个或多个用户级线程映射为一个内核线程。轻量进程被内核单独调度并且可在多处理器间并行运行。
  • 内核线程(Kernel thread)内核线程是基本被调度实体,并且也是被指派(dispatch)到多处理器之中一个上运行的独立实体。

下图展示了这四个概念之间的关系。注意每个轻量进程都对应一个内核线程的。轻量进程在进程内是可见的,所以轻量进程的数据结构存放相应的进程地址空间内。同时,每一个轻量进程都绑定到单独可指派的(dispatchable)内核线程,而内核线程数据结构是在内核空间内的。 Continue reading →


8
Jun 10

操作系统是什么?

操作系统是什么?它的本质是什么?操作系统是集策略和机制( policy and mechanism)、法则与无法则(algorithm and heuristic)和思想理论与实践经验于一身的高度复杂的混合物(mixtures)。本手册(vade mecum)尝试揉合对操作系统的各种不同观点,一步一步地引导初学者掌握这个计算机科学最复杂的主题。

操作系统主题内容之广以及独立内容之多,以致于学生和教师常常只关注局部而忽视统览全局的思想。我希望通过本书提出的双重思想——资源管理思想(resource management )和美化思想(beautification),矫正这种情况。

(KEMIN:所谓的揉合各种观点其实是抽象出操作系统最一般的理论,指出操作系统的本质) Continue reading →


8
Jun 10

操作系统发展史

3.1 Open shop

早期的计算机体积庞大、价值昂贵,并且难以使用。计算机用户必须是专业人员,而且用户既是程序员,又是操作员,使用前必须先预约一段(blocks )时间(KEMIN:意思是说时间到了没计算完必须再次预约)。会话情形大似如下:

前OS.png

我们看看1964年时使用计算机 IBM 1620一个会话情况,这台计算机执行程序需要多步的编译:

首先,用户首轮载入FORTRAN的编译器,操作包括:

  • 通过控制台命令按钮清空主存;
  • 把编译器(用穿孔卡片保存的)放入读卡器;
  • 把待编译的源程序(穿孔卡片)放在编译器的后面,与编译器一起读入;
  • 按下读卡器的“load”按钮;

首轮计算输出的卡片叫“中间输出(intermediate output)”。如果有任何编译错误,控制台的灯会闪,错误信息出显示在控制台的打字机上(typewriter)。 Continue reading →


7
Jun 10

什么叫程序运行?

# 2009-4-9 20:04:23 b.用电脑多了会有种错觉,以为计算机屏幕上跑了好多不同的程序,包括也以为操作系统也一个独立运行的程序。事实上,这种不同只存在于不同的应用程序之间,操作系统在逻辑上是应用程序的一部分。如果这种假设成立,那么有个概念很难理解,就是到底什么叫运行?

# 2009-4-9 21:37:32 b.之所以很理解应用程序和操作系统是“运行”的同一体,是因为操作系统具体双重角色。操作系统在作硬件的扩展一面是与应用程序一同“运行”;在作为资源管理一面则是管理应用程序,有自己的“运行”…… Continue reading →