《上机1(操作系统上机).pdf》由会员分享,可在线阅读,更多相关《上机1(操作系统上机).pdf(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一部分第一部分 上机环境上机环境 第一章 linux 简介 Linux 是由 linus Bcnedict Torvalds 等众多软件高手共同开发的、是一种能运行于多种平台(如 PC 及其兼容机、ALPHA 工作站、SUN Sparc 工作站)、源码公开、免费、功能强大、遵守 POSIX 标准、与 UNIX 兼容的操作系统。Linux 运行的硬件平台运行的硬件平台 Linux 运行的硬件平台起初是 Intel 386、486、Pentium、Pentium Pro 等。现在,还包括Alpha、PowerPC、Sparc 等。Linux 不但支持 32 位,还支持 64 位如 Alpha。L
2、inux 不但支持单 CPU,还支持多 CPU。Linux 的特点的特点 全面的多任务和真正的 3 2 位操作系统。L i n u x 和其他 U N I X 系统一样是真正的多任务系统,它允许多个用户同时在一个系统上运行多道程序。L i n u x 还是真正的 3 2位操作系统,它工作在 Intel 80386 和后来的 Intel 处理器的保护模式下。X Window 系统。X Window 是 UNIX 平台上的事实工业标准。XFree86 则是 L i n u x 平台上的 X Window 系统。X Window 系统是功能强大的图形界面,支持多种应用程序。虚拟内存和共享库。Linu
3、x 可以利用硬盘的一部分作为虚拟内存,扩展可用内存数量。同时利用共享库技术,允许那些使用标准子过程的程序在运行时共享子过程,从而节约了大量的系统空间。Linux 内核中的代码均为自由代码。Linux 上的大部分程序是 GNU 计划下开发的自由软件。Linux 支持多种硬件平台。符合 IEEE POSIX.1 标准,注重系统可移植性。Linux 系统网络功能强大,在超强网络需求下表现出惊人的健壮性。支持 T C P/I P协议。Linux 遵循系统内核“小就是美”的设计原则,在其上提供大量实用的应用软件。1.1 安装 linux 虚拟机 1.1 安装 linux 虚拟机 所谓虚拟机,指的是能够在
4、一台真实计算机上虚拟出一台计算机,同时运行两个或更多的操作系统。它以原有的操作系统为基础,使用额外的硬盘空间创建一个虚拟计算机。当用户使用虚拟机的时候,它与使用一台新机器是完全一样的。VMware 是一种能在操作系统上虚拟计算机硬件设备的中介程序,相当于在一台机器上模拟出多台机器。它是把操作系统安装在虚拟的硬盘中,不需要在现有的物理分区中重新分区。VMvare 事实上是一个介于操作系统、硬件设备与虚拟机器之间的协调器与多工器。它能提供下列功能:在一台个人计算机上同时执行多个操作系统。使每个操作系统能协同工作,实时互访。通过软盘驱动器与网络系统可以交换每个操作系统内的文件资料(一般如果同是 WI
5、NDOWS 系统的话可以通过网络邻居,如果是LINUX 与 WINDOWS 之间的话,可以通过 SAMBA 服务器来实现)将每个操作系统独立于个别的虚拟机器,使每个操作系统的资料不会因其他操作系统当机而损坏。在开发网络应用系统时,可以在同一台机器上模拟远方网站与本机浏览器的操作状况。现在以 win2000 下利用 vmware 安装 redhat7 为例,介绍安装的具体过程:第一步:第一步:安装 Vmware:首先以 Administrator 用户登录 Windows 2000,安装 Vmware 的过程比较简单,用户只要简单地双击此软件包,即可开始自解压并安装。整个过程只要点击下一步即可。
6、第二步第二步:配置虚拟机:首先运行 Vmware,之后,选择 Vmware Configuration Wizard 建立一个虚拟配置文件。选择子系统为 Linux,保存目录为 H:redhat7(用户可自行决定安装的路径,不过最好给vmware 独立空出一个分区),Vmware 以虚拟方式在所选定的文件目录中建立虚拟的 Linux 文件系统,下面要安装的所有 Linux 系统都放置在这一目录中。选择 linux 要占用的磁盘大小设为 2000M,这个数字由用户自行定义。不过 Vmware for Windows 2000 所能支持的最大硬盘空间不能超过2000MB。要在虚拟机上使用软盘与光驱
7、,还要将Floppy 和CDROM 选择项置为 Enabled。如果要使用网络,要求虚拟机以一个独立的主机出现在网络中,则要选择 HostBridge 选项。设置完毕后,应保存配置。如果想对虚拟的配置进行更改或添加虚拟设备,如硬盘、光驱、声卡等硬件,可选择选单上的 settings 选项中的 Configuration Editor进行配置。第三步:第三步:运行并安装 linux 首先运行 Vmware for Windows 2000,选择事先建立好的 Linux 虚拟机,将 Red Hat Linux光盘放入光驱中,选择“power on”启动虚拟机,开始安装。这样就开始 Red Hat
8、Linux 的安装,安装过程同在一台独立的计算机上安装 Red Hat Linux 是一样的。第四步:第四步:安装 VMware Tools for Linux 使 x-windows 正常运行 正常装好以后为了使 x 正常运行,需要安装 Vmware Tools for linux。在 Vmware 的窗体上有一个 setting 选项中选择 Vmware Tools Install,跳过帮助,在随后的窗体中,点 ok 就可以了。然后以 root 进入 linux 虚拟机中,进行如下操作:在虚拟机中有一个缺省的 Vmware Tools Floppy(并非真实软盘),可将它挂接到文件系统中,
9、将其中的一个压缩文件拷贝下来进行安装即可。mount-t vfat/dev/fd0/mnt cp/mnt/vmware-linux-tools.tar.gz/tmp umount/dev/fd0 解压缩 Vmware-linux-tool.tar.gz,并进行安装 cd/tmp tar-zxf vmware-linux-tools.tar.gz cd vmware-linux-tools./install.pl 1.2 linux 常用命令 1.2 linux 常用命令 1.2.1 什么是 shell 1.2.1 什么是 shell shell 是一个命令行解释器,提供操作系统核心(称为 ke
10、inel)与用户之间进行交互。它从用户登录起就开始运行,允许用户通过 shell 脚本或者命令行的方式输入命令,并通过翻译这些命令完成用户与 kernel 之间的交互。当用户在终端输入一条命令时,shell 会以如下的方式响应:首先解析命令行,并处理通配符、重新定向、管道和作业控制,然后,搜索外部命令,如果找到就执行它。可以使用下面这个命令查看 shell:echo$SHELL 常见的 shell 有:ash,ksh,zch,csh,bash(linux 系统默认使用的 shell)。1.2.2 linux 常用命令 1.2.2 linux 常用命令?有关管理文件和目录的命令有关管理文件和目录
11、的命令 ls:list 显示指定目录的内容,命令根据文件名的字母顺序依次列出文件相关信息。$ls myfile phone ln:link files 连接文件或给文件起一个别名。即建立已存在的文件 file 到目标的一个连接,相当于起一个别名,而实际上只有一个文件,对其内容改变将影响到另一个文件。$ln sourcefile targetfile 现在就有两个文件了,其内容与 sourcefile 一致。cat:concatenate 显示文件内容或合并多个文件。即在标准输出上按顺序显示内容,也可将多个文件按顺序存到指定的文件上去。$cat myfile$cat file1 file2fil
12、e3 将 file1、file2 合并入 file3 中 more:将文件内容每次按一个屏幕的大小进行输出,用户可按空格键看下一个页面。cp:copy files 拷贝文件。即将一个已存在的文件复制到另一个文件中。实际有两个内容一致的文件。$cp sourcefiles targetfile mv:move files 改变文件的名称或移动所在的目录。$mv oldfile newfile 现在没有 oldfile 这个文件了,只有与其内容一致的 newfile 文件。rm:remove file 删除文件或目录。$rm file 在当前目录下删除 file 这个文件。mkdir:make d
13、irectory 创建一个新的目录。需有对目标目录的写入权限。$mkdir newdir 在当前目录下新建一个新目录,名字为 newdir。rmdir:remove directory 删除指定的目录,注意必须为空目录,否则无法删除,另外得在该目录的父目录以上来进行。$rmdir emptyfile grep:global search regular expression and print out the line 在文件中查找指定的字符串,找到后显示字符串所处的行号。$grep charser onefile pwd:print working directory 显示当前工作目录的名称
14、。$pwd 结果可能显示:/home/myname?有关磁盘系统和文件空间的命令有关磁盘系统和文件空间的命令 df:disk free 显示还可使用的存储空间和文件数目。即将文件系统上可使用的空间均列出来。$df 结果与个人机器的配置有关:filesystem 1k-blocks used available use%mount on /dev/hda8 9661408 1473256 7697368 17%/dev/hda1 5116668 2876288 2240380 57%/mnt/WinC /dev/hda5 12289692 5806900 6482792 48%/mnt/WinD
15、 du:disk usage 计算磁盘的使用情况。即显示当前目录下所有子目录和文件使用的块数。$du 44./ciphers 8./cryptdoop 68.find:find file 查找符合指定条件的文件。即在指定目录下开始查找符合指定条件的文件。$find.name file*-print 将在当前目录下文件名起始为 file 的文件都列出来。mount:挂接文件系统。mount (参数)设备 存放目录$mount t vfat -o iocharset=cp936 /dev/hda5 /mnt/WinD 事先在/mnt 下新建 WinD,并在终端用 fdisk l 来察看磁盘的信息,
16、若 hda5 的文件系统为 fat32 格式,则可用如上命令挂接该磁盘,若为 ntfs 格式,需上网下载与内核版本相关的插件才能挂接成功。Iocharset=cp936 表示支持中文。umount:卸下文件系统 umount 已经挂上的目录和设备名 umount /mnt od:octal dump 以 8 进制的显示方式察看文件内容。指定不同选项也可以不同方式显示。$od c listing 以 ascii 码来显示文件 listing 的内容。?有关文件备份和压缩的命令有关文件备份和压缩的命令 tar:tape archive 存档和分发文件,可将多个文件打包在一起,以 tar 的格式存放
17、在一个存档文件中。同样,tar 格式的存档文件也可用 tar 命令来解包还原成多个文件。tar 命令的选项及其含义:选 项 含 义 功 能 C Create 创建新的存档文件 R Replace 添加文件到存放文件中 T Table of contents 列出 tar 文件中所有被打包的文件名 X Extract 从存档文件中还原出被打包的文件 F File 用下一个参数作为存档文件的存放位置 V Verbose 显示详细打包过程信息 图 1.1 tar 命令的选项$tar -cvf /tarfile/project.tar.将当前目录下的所有文件进行打包,存放在/tarfile/proje
18、ct.tar 文件中。$tar -xvf /tarfile/project.tar 还原出 tar 文件中的所有文件。?有关管理使用者和设定权限的命令有关管理使用者和设定权限的命令 chmod:change mode 设定文件或目录的存取权限。文件的相关信息(可用 ll 或 ls l 来察看)共有 10 个字符,第 2-4 个字符表示文件所有者(user)对该文件的权限,第 5-7 字符表示组(group)对该文件的权限,第 8-10 字符表示其他人(other)对该文件的权限。权限分三种:r:可读;w:可写;e:可执行,也可用 0、1 来表示:0:有此权限;1:无此权限。$chmod 077
19、7 myfile 文件 myfile 对每个用户均可读、可写、可执行。$chmod o-w,g+r myfile 文件 myfile 对所有者不可写,给组成员增加可读权限。chown:change owner 改变文件的所有者。$chown newowner myfile 将文件 myfile 的所有者改为 newowner。su:super user 将控制权转给指定的用户而不必先退出系统。$su root$su 这两条命令都是将系统的控制权交给超级用户。$su -newowner 将控制权交给用户 newowner 且保持环境变量不改变。w:显示当前登录到机器的用户信息及其行为$w 9:4
20、8pm up 45 min,1 users,load average 0.01 0.07 0.14 USER TTY FROM LOGIN IDLE JCPU PCPU WHAT root :0 -9:03pm -当前 root 用户在 9:03 时登录,其终端为 0 号。who:察看此时有哪些用户正在使用系统。$who root :0 Jul 23 21:03 用户 root 在 21:03 时登录,使用 0 号终端。wall:write allwrite 给系统中的每个用户发消息(区别于 write 只给仍在系统中的用户发消息)。一般情况下由系统管理员执行。$wall messagefil
21、e 将存放在文件 messagefile 中的消息发给所有用户。?有关关机和查看系统信息的命令有关关机和查看系统信息的命令 sync:将内存中的信息写入磁盘,实际执行的是 sync 系统调用。date:列出或设定系统现在的时间、日期(设定只能由 root 来执行)。$date 三 7 月 23 21:58:23 CST 2003$date 11200909 设定时间为 11 月 20 日 9 点 9 分。shutdown:让计算机关机。可以设置为立即关机或等若干时间(以秒为单位 shutdown t 9)后才关机。reboot:让计算机重启。ps:process status 显示系统内进程的
22、相关信息,包括进程号、所有者、资源使用情况、终端、大小、状态、使用时间等。top:实时显示系统中 cpu、内存、swap 的使用情况,并显示此时系统内所有进程及其资源使用情况。$top 9:56pm,up 53 min,1 user,load average.59 processes,55 sleeping,3 running,1 zombie,0 stopped cpu status:.mem status.显示有 59 个进程,55 个睡眠,3 个运行,1 个进入僵死状态。kill:给指定的进程发一个信号,该信号是一个内部数,用来指定 kill 的类型,一般默认是15 号信号量 SIGTE
23、RM(终止),系统默认终止信号。某些进程可以选择忽略该信号。如果需要确实终止某个进程,可以给该进程发送 9 号信号量 SIGKILL,这是系统中无法被忽略或捕捉的两个信号之一,它可确保杀死进程。$kill 1209 终止进程号为 1209 的进程。$kill-9 1209 确保终止进程号为 1209 的进程。uname:unix name 显示使用的系统的名称。$uname linux uptime:查看系统的负载,观察系统已运行了多长时间。$uptime 9:58pm,up 55 min,1 user,load average 0.01 0.07 0.08 load average 是系统在
24、最近 1 分、10 分、15 分钟内的负载情况。?有关网络操作的情况有关网络操作的情况 ftp:file transfer protocol 文件传输协议,用于在网络上进行文件传输。$ftp 连接上后,可对远程 ftp 服务器上的文件和目录进行查询和下载(get、mget)。telnet:使用 telnet 协议来与远程服务器进行相连。$telnet netstat:显示各种网络状态。可用来检查网络相连情况。需在进行网络连接后进行。netstat ping:察看网络网络线路是否连接和特定主机的 TCP/IP 是否正常运行。$ping 127.0.0.1 察看本机$ping 察看西电网站是否连通
25、,连通则返回一些信息如时间、主机 ip 地址等,否则返回request time out。whois:察看 internet 上用户目录。Linux 中提供了大量的有用的命令,以上介绍的仅仅是比较常用的命令的基本格式和用法。关于更多的命令和对特定命令的具体解释和用法限制等,均可在终端输入 man(manual的缩写)来查询有关该命令的详细功能、用法和选项。如:$man ls 就会出现对命令 ls 的详细说明。1.3 vi 编辑器 1.3 vi 编辑器 1.3.1 vi 编辑器 1.3.1 vi 编辑器 vi 是大多数 unix 系统都支持的全屏文本编辑器,它具有字处理器的灵活性和简单易用的特性
26、。vi 有两种工作模式:命令模式和文本输入模式,在 vi 的使用中,用户可在两种模式间进行切换。命令模式:vi 在初始启动时先进入命令模式,在这种模式下,键的输入不会在屏幕上显示,只会被解释执行,因此用户可以利用一些预先定义好的按键来移动光标、保存文件等。文本输入模式:在这种模式下,vi 会按序显示用户键盘的输入,此时,按键不是作为命令执行,而只是作为文本写入到用户的文件中。状态行:屏幕最低一行,用来反馈编辑操作结果、错误信息等。1.3.2 基本 vi 编辑器命令 1.3.2 基本 vi 编辑器命令 进入进入 vi 编辑器编辑器 为了启动 vi,用户可以在终端输入 vi,按空格,再输入新文件名
27、(如 myfile),然后按回车键。若 myfile 已经存在,则 vi 就会在屏幕上显示该文件的第一行;否则,vi 会清除屏幕,显示 vi 编辑器的一些信息。此时 vi 处于命令模式,准备接受用户的命令。为了输入文本,必须切换到文本输入模式,一般是按下 i(insert)键或 a(append)键来切换。文本输入模式文本输入模式 用户只有处在文本输入模式下才能输入文字到文件中,然而不同的按键使得进入文本输入模式的方式有些差异。以下总结了从 vi 的命令模式切换到文本输入模式状态的命令键:命令键 功 能 i(小写)在光标左侧输入文本 I 在光标所在行的开头输入文本 a(小写)在光标右侧输入文本
28、 A 在光标所在行的末尾输入文本 o(小写)在光标所在行的下一行添加新行,并且光标位于新行的开头 O 在光标所在行的上一行添加新行,并且光标位于新行的开头 图 1.2 切换至文本输入模式的命令键 命令模式命令模式 启动 vi 编辑器,默认进入命令模式;在文本输入模式下,可以按ESC键切换到命令模式。在这种模式下,用户可进行各种操作:移动光标:要对正文内容进行删除、修改或插入,首先需要将光标移动到相应的位置。用户既可以通过移动箭头键来移动,也可以使用如下的快捷键来移动:键 功 能 h 或左箭头 光标左移一个空格 j 或右箭头 光标下移一行 k 或上箭头 光标上移一行 l 或下箭头 光标右移一个空
29、格$将光标移到当前行的末尾 W 右移光标到后一个字的开头 B 左移光标到前一个字的开头 E 右移光标到下一个字的末尾 0(数字)左移光标到本行的开头 回车键(return)移动光标到下一行的开头 空格键(space)光标右移一个空格 回退键(backspace)光标左移一个空格 图 1.3 vi 的光标移动键 文本修改:文本修改:vi 处于命令模式时,可以进行替换字符、删除字符等操作,也可以用 undo 命令来修改错误。文本修改命令仅适用于 vi 的命令模式,大部分不会修改其工作模式。键 功 能 是否改变模式 X 删除光标所在位置的字符 不改变 dd(小写)删除光标所在行 不改变 u(小写)放
30、弃最近的修改 不改变 U 放弃对当前行做的所有修改 不改变 r(小写)按键用新字符替换光标所在位置的字符 改变至文本输入模式 R 从当前位置起开始替换字符 改变至文本输入模式 .(点号)重复上次操作 不改变 图 1.4 修改文本的快捷键 退出退出 vi 用户可以根据自己的意图而选择不同的退出 vi 的方式。键 功 能 Wq 保存文件,同时退出 vi W 保存文件,但不退出 vi Q 退出 vi q!退出 vi,同时放弃所作的修改 ZZ 保存文件,同时退出 vi(同 wq)图 1.5 vi 编辑器的退出命令 解释:解释:wq:用户在编辑结束时,可用此命令来保存文件,然后退出 vi。w:在编辑长文
31、件时,可用此命令来定期保存文件内容。q:若用户只是读文件而未修改,可用此命令来退出,若已进行修改,则只能选择 q!来放弃所作的修改(此时源文件不变)或 wq(源文件发生改变)来退出 vi。用户要退出 vi 时,首先要确保回到命令模式(按ESC),然后再按冒号(:),再输入各种退出 vi 的命令。1.4 编译运行程序 1.4 编译运行程序 1.4.1 开发环境工具简介 1.4.1 开发环境工具简介 本部分介绍的是 C/C+开发环境,它是由许多组件组成的,包括开发工具和运行阶段支持组件。开发工具:开发工具:?gcc:gcc 是 GNU C Complier 的缩写,它是 C/C+开发环境的核心。在
32、调用 gcc 编译 c 语言程序时,该组件可以调用其他程序(如:ld 和 cpp)以便执行链接过程和预处理过程。除了进行基本编译,gcc 还能够进行语法检验、优化和特殊调试符号的插入。?g+:g+为 c+编译程序,功能类似 gcc,在实际应用中常作 gcc 的前端。?cpp:cpp 为 c 预处理程序。用于管理#include、#define、#ifdef 以及其他类似的处理命令。通常习惯将 cpp 作为 gcc 的一部分进行调用。?ld:ld 为 GNU 链接程序。用于链接所有模块、库和必须的启动代码,并生成程序可执行的结果。?gas:gas 是 GNU Assembler 的缩写。主要用于
33、处理汇编的源代码。很少被直接调用。?make:make是GNU项目的创建工具,其功能是管理软件的构造过程。根据指定的文件makefile的规则,make 能够自动确定编译的对象和为生成可执行程序(或更新可执行程序)要运行的命令。?gdb:gdb 为 GNU Debugger 调试程序。用于诊断软件、运行阶段的问题,允许通过源代码逐行的交互单步检查程序运行情况。还可显示来自故障程序核心文件(core)的信息。?gprof:gprof 为 GNU 配置文件,提供进行代码性能分析的工具以标示出优化操作过程的潜在瓶颈或候选方法。运行阶段工具:运行阶段工具:运行阶段链接程序:负责加载软件在运行阶段内所需
34、的动态库,通常这一过程完全在后台进行。运行阶段链接程序:负责加载软件在运行阶段内所需的动态库,通常这一过程完全在后台进行。?C 库:通常用作动态库,提供许多 c 语言公用函数。?内核:用于提供某种特定的服务,如为程序提供 I/O。1.4.2 C/C+的编译和调试 1.4.2 C/C+的编译和调试 linux 系统为每个可登录的用户在/home/目录下都默认建立了一个以登录名为名字的文件,同时在 PATH 环境变量中自动加入了该路径,因此用户只需将程序存放在在该文件下,便可直接调用 gcc 进行编译了,若是存放在其他文件中,则需要将其路径增加到 PATH 变量中,才能正确进行编译。如用户的所有可
35、运行程序都放在/tmp/myprograms 中,则需要将该目录加入到 PATH 变量中:PATH=:/bin:/usr/bin:/tmp/myprograms C 编译程序编译程序 gcc gcc 是在开始编译一个程序时调用的程序,它的基本用法是 gcc 选项 程序名 选 项 含 义 C 通知 gcc 取消链接步骤,即编译源代码并只生成目标文件(.o)Dmacro 定义指定宏,使其能通过#ifdef 进行验证 Dmacro=value 用给定的值定义指定宏,使其能同样应用于程序的源代码 O filename 编译并生成最终文件,并存放到 filename 文件中 G3 获得有关调试程序的详细
36、调试信息,不能与-o 选项同时使用 Wall 启动所有报警 W 禁止所有报警 图 1.6 gcc 的一些选项 如:现在已经用 vi 编辑器编辑好了一个程序 example.c,存放在/home/muname/目录下,#include int main()printf(“hello,world!n”);return 0;如果要开始编译该程序的话,在终端输入$gcc -o example example.c 如果程序顺利通过编译,就会生成一个名为 example 的可执行程序,继续在终端输入:$./example 此时便可观察程序运行结果。./是在当前目录下寻找。或者:$gcc o example
37、.c$a.out 对没有指定输出到哪个文件的程序,默认是存到 a.out 中 GNU 调试程序调试程序 gdb gdb 是功能强大的故障跟踪工具,它可以通过程序执行的逐行跟踪以及检查变量的内容来根踪程序中的逻辑错误,用户可以设置断点,使程序在到达某个指定的位置之前保持正常的运行状态,也可以设置条件断点使在满足某条件为真之前保持正常运行。在 linux 中,如果程序发生故障的话,系统将自动终止程序的运行,而不会让系统崩溃。命 令 功 能 break location 在指定位置设置断点,location 可以是函数名、行号和偏移量 display expression 每次 gdb 中断执行程序
38、都显示指定表达式的值 next 执行被调试程序的下一段代码(不进入函数内部)print expression 显示表达式的值(与 display 不同,它只显示一次)Runarg 开始加载执行的程序,若有参数,则当做命令行参数 set variable var=val 将变量 var 设置为 val 指定的值 step 单步执行程序(进入函数内部)watch expression 为程序设置监测点,每当指定表达式的值发生变化,程序就停止运行图 1.7 gdb 的一些命令选项 如:进入调试程序:直接在终端输入$gdb example 设置断点:(gdb)break main:对 main 函数设
39、置断点 开始执行:(gdb)run 单步调试:(gdb)step:也可以是(gdb)s 显示变量:(gdb)print var 设置变量:(gdb)set variable val=5 退出调试:(gdb)q 1.5 软件安装 1.5 软件安装 rpm 是 redhat package manager 的缩写,是 redhat 推出的一个关于软件包的管理的软件。它可以提供所有.rpm 包的安装、卸载、升级、查询和验证。它完成功能的不同依赖于为它选择不同的选项:选 项 含 义 功 能 i Install 安装新的软件包 V(大写)Verify 验证软件包 h Hash 当包中文件解压时打印出#表
40、示进度 q Query 查询软件包 e Erase 移除软件包 U Upgrade 升级或安装版本更新的软件包 v(小写)Print Verbose info 列出软件包的详尽信息 图 1.8 rpm 软件包管理的选项 如:假设现在有软件包 foo-1.0-1.i386.rpm 安装该文件包:$rpm-Uvh foo-1.0-1.i386.rpm 或$rpm -ivh foo-1.0-1.i386.rpm 一般在安装软件包时选择选项为 Uvh。查询软件包:$rpm-q foo 查询是否已安装软件包 foo。验证软件包:$rpm-V foo 验证软件包 foo。升级软件包:$rpm-Uvh fo
41、o-1.1-1.i386.rpm 升级软件包与安装软件包的方式基本一致。卸载软件包:$rpm-e foo 卸载软件包 foo。rpm 在实现软件包管理时的具体选项不止以上介绍的这些,关于选项和功能设置可以参考帮助文件:$man rpm 第二部分第二部分 进程与线程进程与线程 第二章 进程控制 2.1 进程控制基础知识 2.1 进程控制基础知识 现代操作系统中最基本的构件是进程,操作系统的基本功能是创建、管理和终止进程。当进程处于活跃状态时,操作系统必须设法使每个进程都分配到处理器执行时间,并协调它们的活动、管理有冲突的请求、给进程分配系统资源。为执行进程管理功能,操作系统维护着每个进程的描述,
42、或者称为进程映像,它包括执行进程的地址空间和一个进程控制块。进程控制块包含操作系统管理进程所需要的所有信息,包括它的当前状态、分配给它的资源、优先级和其他相关数据。在整个生命周期中,进程总是在一些状态之间转换。最重要的状态有就绪、运行和阻塞。一个就绪进程是指当前没有运行但已经做好了执行准备的进程,只要操作系统调度到它就立即可以执行;运行进程是指当前正在被处理器执行的进程,在多处理器系统中,会有多个进程处于这种状态;阻塞进程是指正在等待某一事件的完成,如一次 I/O 操作。一个正在运行的进程或者被一个在进程外发生且被处理器识别的中断事件打断,或者被执行操作系统的管理程序调用打断。不论哪种情况,处
43、理器都执行一次模式切换,把控制转交给操作系统例程。操作系统在完成必须的操作后,可以恢复被中断的进程或者切换到被的进程。在学习了进程控制部分后,我们安排一个实验用来巩固加深对进程控制部分的理解和认识。2.2 实验一:进程的创建和销毁 2.2 实验一:进程的创建和销毁 实验题目实验题目:创建多进程 实验目的:实验目的:1.巩固加深对操作系统进程控制部分的理解和认识。2.学会在 Linux 或者 Unix 上创建进程、终止进程。3.观察父子进程关系。4.掌握与进程控制相关的一些系统函数用法。实验分析:实验分析:1)实验要用到 fork、exit、exec 族、wait、sleep 等系统调用。用 f
44、 o r k 可以创建新进程,用 e x e c 可以执行新的程序。e x i t 函数和两个 w a i t 函数处理终止和等待终止。这些是我们需要的基本的进程控制原语。2)程序框架要求是:利用 fork 创建子进程,然后让子进程和父进程分别并发执行一段不同的代码,观察执行结果,并分析原因。3)在以上程序框架的基础上,利用 exec、wait、sleep 等系统调用扩充父子进程的执行代码以及执行方式,观察执行结果,并分析原因。4)根据操作系统原理,父进程的很多其他性质可由子进程继承,同学们在实验过程中可以编程加以验证。函数参考手册:函数参考手册:#include#include pid_t
45、fork(void);返回值:子进程中为 0,父进程中为子进程 ID,出错为1 关于 fork 的理解,有以下关键几点:注意注意 1:由 f o r k 创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是 0,而父进程的返回值则是新子进程的进程 I D。将子进程 I D 返回给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数使一个进程可以获得其所有子进程的进程 I D。f o r k 使子进程得到返回值 0 的理由是:一个进程只会有一个父进程,所以子进程总是可以调用 g e t p p i d 以获得其父进程
46、的进程 I D(进程 ID 0 总是由交换进程使用,所以一个子进程的进程 I D 不可能为 0)。注意注意 2:子进程和父进程继续执行 f o r k 之后的指令。子进程是父进程的复制品。例如,子进程获得父进程数据空间、堆和栈的复制品。注意,这是子进程所拥有的拷贝。父、子进程并不共享这些存储空间部分。如果正文段是只读的,则父、子进程共享正文段。现在很多的实现并不做一个父进程数据段和堆的完全拷贝,因为在 f o r k 之后经常跟随着 e x e c。作为替代,使用了在写时复制(C o p y-O n-Write,COW)的技术。这些区域由父、子进程共享,而且内核将它们的存取许可权改变为只读的。
47、如果有进程试图修改这些区域,则内核为有关部分,典型的是虚存系统中的“页”,做一个拷贝。注意注意 3:根据操作系统原理,必须知道父进程的很多其他性质可由子进程继承:实际用户 I D、实际组 I D、有效用户 I D、有效组 I D。添加组 I D。进程组 I D。对话期 I D。控制终端。设置-用户-I D 标志和设置-组-I D 标志。当前工作目录。根目录。文件方式创建屏蔽字。信号屏蔽和排列。对任一打开文件描述符的在执行时关闭标志。环境。连接的共享存储段。资源限制。注意注意 4:根据操作系统原理,必须知道父、子进程之间的区别是:fork 的返回值。进程 I D。不同的父进程 I D。子进程的
48、t m s _ u t i m e,t m s _ s t i m e,t m s _ c u t i m e 以及 t m s _ u s t i m e 设置为 0。父进程设置的锁,子进程不继承。子进程的未决告警被清除。子进程的未决信号集设置为空集。注意注意 5:另外,一般来说,在 f o r k 之后是父进程先执行还是子进程先执行是不确定的。这取决于内核所使用的调度算法。如果要求父、子进程之间相互同步,则要求某种形式的进程间通信。#include extern char*environ;int execl(const char*path,const char*arg,);int exec
49、vp(const char*filename,char*const argv);返回值:返回-1 表示错误,若成功则不返回;函数说明:path 要给出程序的路径名和程序名称;arg 是参数,参数 1 给出程序名称,参数 2 等给出程序需要的其他参数,最后一个参数必须是 NULL。关于 exec 函数,有一下关键几点:注意注意 1:用 f o r k 函数创建子进程后,子进程往往要调用一种 e x e c 函数以执行另一个程序。当进程调用一种 e x e c 函数时,该进程完全由新程序代换,而新程序则从其 m a i n 函数开始执行。因为调用 e x e c 并不创建新进程,所以前后的进程 I
50、 D 并未改变。e x e c 只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。注意注意 2:有多种不同的 e x e c 函数可供使用,它们常常被统称为 e x e c 函数。这些 e x e c 函数都是进程控制原语。注意注意 3:前面曾提及在执行 e x e c 后,进程 I D 没有改变。除此之外,执行新程序的进程还保持了原进程的下列特征:进程 I D 和父进程 I D。实际用户 I D 和实际组 I D。添加组 I D。进程组 I D。对话期 I D。控制终端。闹钟尚余留的时间。当前工作目录。根目录。文件方式创建屏蔽字。文件锁。进程信号屏蔽。未决信号。资源限制。tms_uti