Click here to load reader
Upload
tokala
View
114
Download
11
Embed Size (px)
DESCRIPTION
Unix 操作系统内核浅析. 潘海为. Unix 历史. 1965 年在 ARPA 的支持下 MIT 、贝尔实验室和通用电气公司决定开发一种 “ 公用计算服务系统 ” ,希望能够同时支持整个波士顿所有的分时用户。该系统称作 MULTICS (MULTiplexed Information and Computing Service ). MULTICS 设计目标是: 便利的终端使用 —— 大量远程终端通过电话线接入计算机主机 高可靠的大型文件系统 —— 大容量的用户信息共享;存储和构造层次化信息结构的能力. Unix 历史. - PowerPoint PPT Presentation
Citation preview
1
智能信息处理研究中心智能信息处理研究中心(( RCIIPRCIIP))
Unix 操作系统内核浅析
潘海为
2
P
a
n
Unix 历史1965 年在 ARPA 的支持下 MIT 、贝尔实验室和通用电气公司决定开发一种“公用计算服务系统”,希望能够同时支持整个波士顿所有的分时用户。该系统称作 MULTICS (MULTiplexed Information and Computing Service )
MULTICS 设计目标是:– 便利的终端使用——大量远程终端通过电话线接入计算机主机
– 高可靠的大型文件系统——大容量的用户信息共享;存储和构造层次化信息结构的能力
3
P
a
n
Unix 历史 MULTICS 研制难度超出所有人的预料,长期的研制工作达不到预期目标, 1969 年 4 月贝尔实验室退出,通用电气公司也退出。最终, MIT 坚持下来, MULTICS 成功运行,成为商业产品。(通用汽车、福特、美国国家安全局等)运行MULTICS 的计算机系统在九十年代中陆续被关闭(加拿大国防部于 2000年 10月 30日 17:08)
MULTICS 的意义引入了许多现代操作系统领域概念雏形,对随后的操作系统特别是 UNIX 的成功有着巨大的影响
4
P
a
n
Unix 历史小型计算机、游戏和 Unix 的成功
– 1969 年,在贝尔退出 MULTICS 研制项目后, Ken Thompson 和 Dennis M. Ritchie 在一台无人用的DEC PDP-7 上,重新摆弄原先在 MULTICS 项目上设计的“空间旅行”游戏
– 为了使游戏能够在 PDP-7 上顺利运行,他们陆续开发了浮点运算软件包、显示驱动软件,设计了文件系统、实用程序、 shell 和汇编程序
– 1970 年,在一切完成后,给新系统起了个同MULTICS 音相近的名字 UNIX
– 1973 年, UNIX 用 C 语言全部重写,自此, UNIX 诞生了
– 1977 年, Unix 被几乎完全不变的移植到非 PDP-7 机上
5
P
a
n
Unix 历史
UNIX 是现代操作系统的代表。 Unix 运行时的安全性、可靠性以及强大的计算能力赢得广大用户的信赖 .
促使 UNIX 系统成功的因素:– 首先,由于 UNIX 是用 C 语言编写,因此它是可移植的, UNIX 是世界上唯一能在笔记本计算机、 PC 机、工作站直至巨型机上运行的操作系统
– 第二,系统源代码非常有效,系统容易适应特殊的需求
– 最后,也是最重要的一点,它是一个良好的、通用的、多用户、多任务、分时操作系统
6
P
a
n
Unix创始人
Ken Thompson Dennis Ritchie
•1983年图灵奖•1999年美国国家技术金奖
7
P
a
n
Unix创始人
8
P
a
n
系统结构
9
P
a
n
文件系统的树状结构
/
fsl bin etc usr unix dev
mjb maury sh date who passwd src bin tty00 tty01
cmd
date.c who.c
10
P
a
n
实例$ ./copy pan.c haiwei.c
$ vi copy.c
$ (Shell) fork() exec(“vi”)
引导块 超级块 索引节点表 数据块
引导块:占据文件系统的开头,一般是一个扇区,含有被读入机器起引导或初启操作系统作用的引导代码。
11
P
a
n
实例$ ./copy pan.c haiwei.c
$ vi copy.c
$ (Shell) fork() exec(“vi”)
引导块 超级块 索引节点表 数据块
超级块:描述了文件系统的状态——大小,存储了多少文件,在文件系统中何处可找到空闲空间,以及其他信息
12
P
a
n
实例$ ./copy pan.c haiwei.c
$ vi copy.c
$ (Shell) fork() exec(“vi”)
引导块 超级块 索引节点表 数据块
索引节点表:是一张装有索引节点的表, namei(/usr/bin/vi) 用于生成索引节点号
13
P
a
n
实例$ ./copy pan.c haiwei.c
$ vi copy.c
$ (Shell) fork() exec(“vi”)
引导块 超级块 索引节点表 数据块
数据块:包含文件数据与管理数据
14
P
a
n
实例
正文区数据区栈区
$ (Shell子进程 )
copy.c
正文区数据区栈区
vi
15
P
a
n
实例
正文区数据区栈区
$ (Shell子进程 )
copy.c
正文区数据区栈区
vi 进程区表
16
P
a
n
实例
正文区 I数据区 I栈区 I
vi-1 进程区表
正文区数据区栈区
vi 进程区表
vi-1…vi
进程表
U 区 -1
U区
正文区数据区 I栈区 I…
数据区栈区
系统区表 内存正文区数据区 I栈区 I…
数据区栈区
17
P
a
n
实例$ ./copy pan.c haiwei.c
$ vi copy.c
$ (Shell) fork() exec(“vi”)
18
P
a
n
实例$ ./copy pan.c haiwei.c
$ vi copy.c
有
无
磁盘索引节点表namei(copy.c)
索引节点表
pan.c…
copy.c
open()
19
P
a
n
实例$ ./copy pan.c haiwei.c
$ vi copy.c
有
无
磁盘索引节点表namei(copy.c)
索引节点表
pan.c…
copy.c
open()
20
P
a
n
实例$ ./copy pan.c haiwei.c
$ vi copy.c
copy.c
有
无
pan.cWei.cCopy.chai.cPan.c…
copy.c
namei()
索引节点表
pan.c…
文件表
vi
pan.c
vi-1
pan.c
vi-2
用户文件描述符表
21
P
a
n
实例
#include <fcntl.h>char buffer [1024];int main(int argc, char *argv[]){
int fdold, fdnew, count;
fdold=open(argv[1], O_RDONLY);fdnew=creat(argv[2], 0666);
while((count = read(fdold, buffer, sizeof(buffer)))>0) write(fdnew, buffer, count);
}
$ ./copy pan.c haiwei.c
$ vi copy.c
22
P
a
n
实例
#include <fcntl.h>char buffer [1024];int main(int argc, char *argv[]){
int fdold, fdnew, count;
fdold=open(argv[1], O_RDONLY);fdnew=creat(argv[2], 0666);
while((count = read(fdold, buffer, sizeof(buffer)))>0) write(fdnew, buffer, count);
}
$ gcc –o copy copy.c
$ ./copy pan.c haiwei.c
23
P
a
n
总结
24
P
a
n
程序库
系统调用接口
文件子系统
进程控制子系统
进程间通信
调度程序
存储管理
高速缓冲
字符设备 块设备
设备驱动程序
硬 件 控 制
硬 件
核心级硬件级
用户程序
用户级核心级
25
P
a
n
谢 谢