1、2第第6 6章章 LinuxLinux操作系统基础操作系统基础主要内容Linux操作系统概述操作系统概述 Linux内核的结构内核的结构Linux设备管理设备管理Linux的使用的使用3第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.1.1 6.1.1 LinuxLinux操作系统的产生及发展操作系统的产生及发展 1990 1990年,年,LinusTorvaldsLinusTorvalds首次接触首次接触MinixMinix;1991 1991年,年,LinusTorvaldsLinusTorvalds开始在开始在MinixMinix上编写各种驱动程序上编写各种驱动程序等操
2、作系统内核组件;等操作系统内核组件;1991 1991年,年,LinusTorvaldsLinusTorvalds公开了公开了LinuxLinux内核;内核;1993 1993年,年,Linux1.0Linux1.0版发行,版发行,LinuxLinux转向转向GPLGPL版权协议;版权协议;1994 1994年,年,LinuxLinux的第一个商业发行版的第一个商业发行版SlackwareSlackware问世;问世;1996 1996年,美国国家标准技术局的计算机系统实验室确认年,美国国家标准技术局的计算机系统实验室确认LinuxLinux版本版本1.2.131.2.13符合符合POSIXP
3、OSIX标准;标准;1999 1999年,年,LinuxLinux的简体中文发行版相继问世;的简体中文发行版相继问世;2001 2001年,年,Linux2.4Linux2.4版内核发布;版内核发布;2003 2003年,年,Linux2.6Linux2.6版内核发布。版内核发布。4第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.1.2 6.1.2 LinuxLinux操作系统的特点操作系统的特点 自由开放软件自由开放软件 真正的多任务多用户真正的多任务多用户 UNIXUNIX的完整实现的完整实现 完全符合完全符合POSIXPOSIX标准标准 良好的用户界面良好的用户界面 强
4、大的网络功能强大的网络功能 良好的可移植性良好的可移植性 设备独立性设备独立性 5第第6 6章章 LinuxLinux操作系统基础操作系统基础主要内容Linux操作系统概述操作系统概述 Linux内核的结构内核的结构Linux设备管理设备管理Linux的使用的使用6第第6 6章章 LinuxLinux操作系统基础操作系统基础操作系统内核的结构模式可分为两种:操作系统内核的结构模式可分为两种:整体式的单内核模式整体式的单内核模式 单内核也叫集中式操作系统。以提高系统执行效率为设单内核也叫集中式操作系统。以提高系统执行效率为设计理念,计理念,缺点是系统升级比较困难。缺点是系统升级比较困难。层次式的
5、微内核模式层次式的微内核模式 微内核是指把操作系统结构中的内存管理、设备管理、文微内核是指把操作系统结构中的内存管理、设备管理、文件系统等高级服务功能尽可能地从内核中分离出来,变成件系统等高级服务功能尽可能地从内核中分离出来,变成几个独立的非内核模块,而在内核中只保留少量最基本的几个独立的非内核模块,而在内核中只保留少量最基本的功能,使内核变得简洁可靠。功能,使内核变得简洁可靠。6.2 6.2 LinuxLinux内核的结构内核的结构 Linux采用的是单内核模式,采用的是单内核模式,Linux内核主要由五个内核主要由五个子系统组成:子系统组成:进程调度进程调度,内存管理内存管理,虚拟文件系统
6、虚拟文件系统,网网络接口络接口,进程间通信进程间通信。7第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.2.1 6.2.1 进程调度进程调度 进程调度控制进程对进程调度控制进程对CPU的访问。采用适当的调度策略的访问。采用适当的调度策略使各进程能够合理的使用使各进程能够合理的使用CPU。进程的定义进程的定义 一个进程是一个程序的一次执行过程。一个进程是一个程序的一次执行过程。Linux进程的状态进程的状态 可运行状态可运行状态 、等待状态、等待状态 、暂停状态、暂停状态、僵死状态、僵死状态 Linux下进程的结构下进程的结构 数据段、堆栈段和代码段数据段、堆栈段和代码段 Li
7、nux进程的种类进程的种类 交互进程、批处理进程、守护进程交互进程、批处理进程、守护进程 Linux进程的创建进程的创建 fork()函数函数 进程所有操作都要依赖进程控制块进程所有操作都要依赖进程控制块 task_struct结构,结构,task_struct结构结构是进程实体的核心,是进程存在的唯一标志。是进程实体的核心,是进程存在的唯一标志。8第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.2.2 6.2.2 内存管理内存管理 内存管理(内存管理(MM)允许多个进程安全的共享主内存区域。允许多个进程安全的共享主内存区域。Linux的内存的内存管理支持虚拟内存。管理支持虚
8、拟内存。Linux虚拟内存的实现需要虚拟内存的实现需要6种机制的支持:地址映射种机制的支持:地址映射机制、内存分配回收机制、缓存和刷新机制、请求页机制、交换机制和内机制、内存分配回收机制、缓存和刷新机制、请求页机制、交换机制和内存共享机制。存共享机制。9第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.2.3 6.2.3 虚拟文件系统虚拟文件系统 Linux的文件系统由两层结构组成。第一层是虚拟文件系统的文件系统由两层结构组成。第一层是虚拟文件系统(VFS),第二层是各种不同的具体文件系统。第二层是各种不同的具体文件系统。10第第6 6章章 LinuxLinux操作系统基础操作
9、系统基础 6.2.4 6.2.4 进程间通信进程间通信 信号机制信号机制 管道管道 消息队列消息队列 命名管道命名管道 信号是在软件层次上对中断机制的一种模拟信号是在软件层次上对中断机制的一种模拟,是进程间通,是进程间通信机制中唯一的异步通信机制信机制中唯一的异步通信机制。用于发送信号的主要系统函数有:用于发送信号的主要系统函数有:kill()、raise()、sigqueue()、alarm()、setitimer()以及以及abort()。管道是利用有公共祖先的进程之间的共享文件描述符进行管道是利用有公共祖先的进程之间的共享文件描述符进行的一种通讯方式的一种通讯方式。命名管道不同于管道之处
10、在于它提供一个路径名与之关联,命名管道不同于管道之处在于它提供一个路径名与之关联,以以FIFO的文件形式存在于文件系统中。的文件形式存在于文件系统中。消息队列实际上就是一个消息的链表。每个消息队列都消息队列实际上就是一个消息的链表。每个消息队列都有一个队列头,用结构有一个队列头,用结构struct msg_queue来描述。来描述。目前主要有两种类型的消息队列:目前主要有两种类型的消息队列:POSIX消息队列和系消息队列和系统统V消息队列。消息队列。11第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.2.5 6.2.5 网络接口网络接口 Linux的网络接口分为四部分:网络设
11、备接口、网络接口核心、网的网络接口分为四部分:网络设备接口、网络接口核心、网络协议族以及网络接口络协议族以及网络接口socket层。层。TCP/IP协议栈四层模型协议栈四层模型 Socket套接字套接字 TCP/IP协议遵守一个四层的模型概念:网络接口层、互联层、传协议遵守一个四层的模型概念:网络接口层、互联层、传输层和应用层。输层和应用层。Socket接口是接口是TCP/IP网络的网络的API,定义了许多函数或例程,程序员可定义了许多函数或例程,程序员可以用它们来开发以用它们来开发TCP/IP网络上的应用程序。套接字基本上有三种类型网络上的应用程序。套接字基本上有三种类型,分别是数据流套接字
12、、数据报套接字和原始套接字。,分别是数据流套接字、数据报套接字和原始套接字。12第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.2.6 6.2.6 各个子系统之间的依赖关系各个子系统之间的依赖关系 进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境下,程序要运行必须为之创建进程,而创建进程的第一件事情,就是环境下,程序要运行必须为之创建进程,而创建进程的第一件事情,就是将程序和数据装入内存。将程序和数据装入内存。进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持进程间通信与内存管理的关系
13、:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥有自己的私有空间,还共享内存通信机制,这种机制允许两个进程除了拥有自己的私有空间,还可以存取共同的内存区域。可以存取共同的内存区域。虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统网络文件系统(NFS),也利用内存管理支持也利用内存管理支持RAMDISK设备。设备。内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程定期由调度程序调度,这也是内
14、存管理依赖于进程调度的交换,交换进程定期由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。出请求,同时,挂起当前正在运行的进程。13第第6 6章章 LinuxLinux操作系统基础操作系统基础主要内容Linux操作系统概述操作系统概述 Linux内核的结构内核的结构Linux设备管理设备管理Linux的使用的使用14第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.3 6.3 LinuxLinux设备管理设备管理 Li
15、nux设备管理的主要任务是控制设备完成输入输出操作,所设备管理的主要任务是控制设备完成输入输出操作,所以又称输入输出(以又称输入输出(I/O)子系统。设备管理把各种设备硬件物子系统。设备管理把各种设备硬件物理特性的细节屏蔽起来,提供一个对各种不同设备进行统一理特性的细节屏蔽起来,提供一个对各种不同设备进行统一操作的接口。操作的接口。在在linux操作系统中有三种类型的设备:操作系统中有三种类型的设备:字符设备字符设备块设备块设备网络设备网络设备15第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.3.1 6.3.1 设备文件设备文件 Linux将所有外部设备看成是一类特殊文件,
16、称之为将所有外部设备看成是一类特殊文件,称之为“设备文件设备文件”。对设备文件的识别使用设备类型、主设备号和次设对设备文件的识别使用设备类型、主设备号和次设备号:备号:设备类型:字符设备或者块设备。设备类型:字符设备或者块设备。主设备号:按照设备使用的驱动程序不同而赋予设备主设备号:按照设备使用的驱动程序不同而赋予设备不同的主设备号。主设备号与驱动程序一一对应。不同的主设备号。主设备号与驱动程序一一对应。次设备号:用来区分使用同一个驱动程序的不同设备次设备号:用来区分使用同一个驱动程序的不同设备。16第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.3.2 6.3.2 设备驱动
17、设备驱动 设备驱动程序是设备驱动程序是Linux内核与设备之间的接口。设备驱内核与设备之间的接口。设备驱动程序对应用程序屏蔽了硬件在实现上的细节,使得应用程动程序对应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样来操作设备。序可以像操作普通文件一样来操作设备。Linux为所有的设备文件提供了统一的操作函数接口来为所有的设备文件提供了统一的操作函数接口来管理这些设备,方法是使用数据结构管理这些设备,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如这个数据结构中包括许多操作函数的指针,如open()、close()、rea
18、d()、write()和和ioctl()等。等。17第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.3.3 6.3.3 控制方式控制方式 轮询方式轮询方式 中断方式中断方式 轮询方式又称查询等待方式。对于不支持中断方式的机轮询方式又称查询等待方式。对于不支持中断方式的机器只能采用这种方式来控制器只能采用这种方式来控制I/O过程,所以过程,所以Linux中也配中也配备了轮询方式。轮询方式意味着需要经常读取设备的状备了轮询方式。轮询方式意味着需要经常读取设备的状态,一直到设备状态表明请求已经完成为止。态,一直到设备状态表明请求已经完成为止。在硬件支持中断的情况下,驱动程序可以使用
19、中断方式在硬件支持中断的情况下,驱动程序可以使用中断方式控制控制I/O过程。当某个设备需要服务时就向过程。当某个设备需要服务时就向CPU发出一发出一个中断信号,个中断信号,CPU接收到信号后根据中断请求号启动中接收到信号后根据中断请求号启动中断服务例程。断服务例程。Linux内核需要将来自硬件设备的中断传内核需要将来自硬件设备的中断传递到相应的设备驱动,这个过程由设备驱动向内核注册递到相应的设备驱动,这个过程由设备驱动向内核注册其使用的中断来协助完成。其使用的中断来协助完成。18第第6 6章章 LinuxLinux操作系统基础操作系统基础主要内容Linux操作系统概述操作系统概述 Linux内
20、核的结构内核的结构Linux设备管理设备管理Linux的使用的使用19第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.4.1 6.4.1 LinuxLinux常用命令常用命令 在线帮助命令:在线帮助命令:man文件管理命令文件管理命令 文件拷贝:文件拷贝:cp 文件移动:文件移动:mv 文件删除:文件删除:rm 目录管理命令目录管理命令 创建目录:创建目录:mkdir 删除空目录:删除空目录:rmdir 改变工作目录:改变工作目录:cd 显示当前完整路径:显示当前完整路径:pwd 列出当前目录内容:列出当前目录内容:ls文本处理命令文本处理命令 按行排序:按行排序:sort
21、删除重复行删除重复行:uniq 备份与压缩命令备份与压缩命令 创建备份:创建备份:tar 压缩和解压缩:压缩和解压缩:gzip 解压缩:解压缩:unzip 改变文件或目录的访问权限命令改变文件或目录的访问权限命令 改变访问权限:改变访问权限:chmod 改变所属的组改变所属的组:chgrp 更改拥有者和所属组更改拥有者和所属组:chown 与用户有关的命令与用户有关的命令 设置和修改用户口令设置和修改用户口令:passwd 用户之间切换用户之间切换:su 系统管理命令系统管理命令 向所有登录用户发送信息向所有登录用户发送信息:wall 向某一个用户发送信向某一个用户发送信:write 20第第
22、6 6章章 LinuxLinux操作系统基础操作系统基础系统管理命令系统管理命令 设定是否允许其他用户用设定是否允许其他用户用write命令给自己发送信息命令给自己发送信息:mesg 强制把内存中的数据写回硬盘强制把内存中的数据写回硬盘:sync 关闭或重启关闭或重启Linux系统系统:shutdown 查看当前系统内存的使用情况查看当前系统内存的使用情况:freeLinux磁盘管理命令磁盘管理命令 检查文件系统的磁盘空间占用情况:检查文件系统的磁盘空间占用情况:df 统计目录(或文件)所占磁盘空间的大小统计目录(或文件)所占磁盘空间的大小:du 挂接设备挂接设备:mount 卸载已经挂接的设
23、备卸载已经挂接的设备:umount Linux其它命令其它命令 显示一段文字显示一段文字:echo 显示某年某月的日历显示某年某月的日历:cal 清除屏幕上的信息清除屏幕上的信息:clear 6.4.1 6.4.1 LinuxLinux常用命令常用命令 21第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.4.2 6.4.2 vi vi编辑器的使用编辑器的使用 vi编辑器是一个命令行编辑器,有三种基本的工作模式:编辑器是一个命令行编辑器,有三种基本的工作模式:(1)命令模式命令模式 vi的默认模式,在命令模式下,可以键入的默认模式,在命令模式下,可以键入命令来删除、更改、移动文
24、本、定位光标、搜索文本字符命令来删除、更改、移动文本、定位光标、搜索文本字符串或退出串或退出vi编辑器。编辑器。(2)编辑模式编辑模式 在编辑模式下,可以向文件中输入文本。在编辑模式下,可以向文件中输入文本。(3)最后行模式最后行模式 当处于命令模式时,通过键入当处于命令模式时,通过键入“:”,将使光标处于屏幕的最后一行,这就称为最后行模式,这将使光标处于屏幕的最后一行,这就称为最后行模式,这时可以执行更先进的编辑命令。注意:所有的命令都是由时可以执行更先进的编辑命令。注意:所有的命令都是由命令模式发起的,所以最后行模式也属于命令模式。命令模式发起的,所以最后行模式也属于命令模式。22第第6
25、6章章 LinuxLinux操作系统基础操作系统基础v vivi编辑器中三种工作模式的切换编辑器中三种工作模式的切换通过键入通过键入i、o、a命令,命令,vi编辑器将离开默认的命令模式,编辑器将离开默认的命令模式,进入编辑模式。在编辑模式下,键入的所有文本都不会被翻进入编辑模式。在编辑模式下,键入的所有文本都不会被翻译成命令,这时,所有键入的文本都会被保存到文件中。译成命令,这时,所有键入的文本都会被保存到文件中。当完成了文本的输入后,按当完成了文本的输入后,按Esc键键vi将回到命令模式下。将回到命令模式下。当处于命令模式下时,通过键入当处于命令模式下时,通过键入“:”,将使光标处于屏,将使
26、光标处于屏幕的最后一行,进入最后行模式。幕的最后一行,进入最后行模式。23第第6 6章章 LinuxLinux操作系统基础操作系统基础 6.4.3 6.4.3 makemake工具和工具和gccgcc编译器编译器 gcc gcc是可以在多种平台上编译出可执行程序的超级编译器是可以在多种平台上编译出可执行程序的超级编译器。举例:举例:gcc c hello.c gcc-o hello.exe hello.cmake命令命令 makefile make命令用于根据命令用于根据文件之间的依赖关系文件之间的依赖关系(在(在makefile文件中定义)来自动维护目标文件,与手工编译和链接文件中定义)来自
27、动维护目标文件,与手工编译和链接相比,相比,make命令的优点在于它只更新修改过的文件命令的优点在于它只更新修改过的文件。makefile定义了一系列的规则来指定哪些文件需要先编定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。进行更复杂的功能操作。makefile带来的好处就是带来的好处就是“自动化编译自动化编译”,一旦写好,一旦写好makefile,只需要一个只需要一个make命令,整个工程即可实现完全命令,整个工程即可实现完全自动编译,从而极大地提高了软件开发的效率。自动编
28、译,从而极大地提高了软件开发的效率。24第第6 6章章 LinuxLinux操作系统基础操作系统基础举例:工程包含举例:工程包含3个个C文件(文件(main.c,mytool1.c,mytool2.c)和和2个个头文件头文件(mytool1.h,mytool2.h),需要写一个需要写一个Makefile来告诉来告诉make命令如何编译和链接这几个文件。命令如何编译和链接这几个文件。v Makefile Makefile的编写格式的编写格式 main:main.o mytool1.o mytool2.ogcc-o main main.o mytool1.o mytool2.omain.o:mai
29、n.c mytool1.h mytool2.hgcc c main.cmytool1.o:mytool1.c mytool1.hgcc c mytool1.cmytool2.o:mytool2.c mytool2.hgcc c mytool2.cclean:rm rf*.o main 25第第6 6章章 LinuxLinux操作系统基础操作系统基础v automake automake和和autoconfautoconf automake automake是一个从文件是一个从文件makefile.am自动生成自动生成makefile.in的工具。的工具。autoconfautoconf一个产生可以自动配置源代码包一个产生可以自动配置源代码包,生成生成shell脚本的脚本的工具工具,以适应各种类以适应各种类UNIX系统的需要。系统的需要。通过通过automake和和autoconf生生成成makefile文件文件的过程的过程