25

Click here to load reader

Unix 操作系统内核浅析

  • 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

Page 1: Unix 操作系统内核浅析

1

智能信息处理研究中心智能信息处理研究中心(( RCIIPRCIIP))

Unix 操作系统内核浅析

潘海为

Page 2: Unix 操作系统内核浅析

2

P

a

n

Unix 历史1965 年在 ARPA 的支持下 MIT 、贝尔实验室和通用电气公司决定开发一种“公用计算服务系统”,希望能够同时支持整个波士顿所有的分时用户。该系统称作 MULTICS (MULTiplexed Information and Computing Service )

MULTICS 设计目标是:– 便利的终端使用——大量远程终端通过电话线接入计算机主机

– 高可靠的大型文件系统——大容量的用户信息共享;存储和构造层次化信息结构的能力

Page 3: Unix 操作系统内核浅析

3

P

a

n

Unix 历史 MULTICS 研制难度超出所有人的预料,长期的研制工作达不到预期目标, 1969 年 4 月贝尔实验室退出,通用电气公司也退出。最终, MIT 坚持下来, MULTICS 成功运行,成为商业产品。(通用汽车、福特、美国国家安全局等)运行MULTICS 的计算机系统在九十年代中陆续被关闭(加拿大国防部于 2000年 10月 30日 17:08)

MULTICS 的意义引入了许多现代操作系统领域概念雏形,对随后的操作系统特别是 UNIX 的成功有着巨大的影响

Page 4: 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 机上

Page 5: Unix 操作系统内核浅析

5

P

a

n

Unix 历史

UNIX 是现代操作系统的代表。 Unix 运行时的安全性、可靠性以及强大的计算能力赢得广大用户的信赖 .

促使 UNIX 系统成功的因素:– 首先,由于 UNIX 是用 C 语言编写,因此它是可移植的, UNIX 是世界上唯一能在笔记本计算机、 PC 机、工作站直至巨型机上运行的操作系统

– 第二,系统源代码非常有效,系统容易适应特殊的需求

– 最后,也是最重要的一点,它是一个良好的、通用的、多用户、多任务、分时操作系统

Page 6: Unix 操作系统内核浅析

6

P

a

n

Unix创始人

Ken Thompson Dennis Ritchie

•1983年图灵奖•1999年美国国家技术金奖

Page 7: Unix 操作系统内核浅析

7

P

a

n

Unix创始人

Page 8: Unix 操作系统内核浅析

8

P

a

n

系统结构

Page 9: Unix 操作系统内核浅析

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

Page 10: Unix 操作系统内核浅析

10

P

a

n

实例$ ./copy pan.c haiwei.c

$ vi copy.c

$ (Shell) fork() exec(“vi”)

引导块 超级块 索引节点表 数据块

引导块:占据文件系统的开头,一般是一个扇区,含有被读入机器起引导或初启操作系统作用的引导代码。

Page 11: Unix 操作系统内核浅析

11

P

a

n

实例$ ./copy pan.c haiwei.c

$ vi copy.c

$ (Shell) fork() exec(“vi”)

引导块 超级块 索引节点表 数据块

超级块:描述了文件系统的状态——大小,存储了多少文件,在文件系统中何处可找到空闲空间,以及其他信息

Page 12: Unix 操作系统内核浅析

12

P

a

n

实例$ ./copy pan.c haiwei.c

$ vi copy.c

$ (Shell) fork() exec(“vi”)

引导块 超级块 索引节点表 数据块

索引节点表:是一张装有索引节点的表, namei(/usr/bin/vi) 用于生成索引节点号

Page 13: Unix 操作系统内核浅析

13

P

a

n

实例$ ./copy pan.c haiwei.c

$ vi copy.c

$ (Shell) fork() exec(“vi”)

引导块 超级块 索引节点表 数据块

数据块:包含文件数据与管理数据

Page 14: Unix 操作系统内核浅析

14

P

a

n

实例

正文区数据区栈区

$ (Shell子进程 )

copy.c

正文区数据区栈区

vi

Page 15: Unix 操作系统内核浅析

15

P

a

n

实例

正文区数据区栈区

$ (Shell子进程 )

copy.c

正文区数据区栈区

vi 进程区表

Page 16: Unix 操作系统内核浅析

16

P

a

n

实例

正文区 I数据区 I栈区 I

vi-1 进程区表

正文区数据区栈区

vi 进程区表

vi-1…vi

进程表

U 区 -1

U区

正文区数据区 I栈区 I…

数据区栈区

系统区表 内存正文区数据区 I栈区 I…

数据区栈区

Page 17: Unix 操作系统内核浅析

17

P

a

n

实例$ ./copy pan.c haiwei.c

$ vi copy.c

$ (Shell) fork() exec(“vi”)

Page 18: Unix 操作系统内核浅析

18

P

a

n

实例$ ./copy pan.c haiwei.c

$ vi copy.c

磁盘索引节点表namei(copy.c)

索引节点表

pan.c…

copy.c

open()

Page 19: Unix 操作系统内核浅析

19

P

a

n

实例$ ./copy pan.c haiwei.c

$ vi copy.c

磁盘索引节点表namei(copy.c)

索引节点表

pan.c…

copy.c

open()

Page 20: Unix 操作系统内核浅析

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

用户文件描述符表

Page 21: Unix 操作系统内核浅析

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

Page 22: Unix 操作系统内核浅析

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

Page 23: Unix 操作系统内核浅析

23

P

a

n

总结

Page 24: Unix 操作系统内核浅析

24

P

a

n

程序库

系统调用接口

文件子系统

进程控制子系统

进程间通信

调度程序

存储管理

高速缓冲

字符设备 块设备

设备驱动程序

硬 件 控 制

硬 件

核心级硬件级

用户程序

用户级核心级

Page 25: Unix 操作系统内核浅析

25

P

a

n

谢 谢