一、单选题(每题4分,共计16题)
1.在计算机系统中,操作系统是( )。 A.处于裸机之上的第一层软件 B.处于硬件之下的低层软件 C.处于应用软件之上的系统软件 D.处于系统软件之上的用户软件 正确答案: A
2.为了使系统中所有的用户都能得到及时的响应,该操作系统应该是( A.多道批处理系统 B.分时系统 C.实时系统 D.网络系统 正确答案: B
3.操作系统对缓冲区的管理属于( )的功能。 A.处理器管理 B.设备管理 C.文件管理 D.存储器管理 正确答案: B
4.在下列操作系统中,强调吞吐能力的是( )。 A.分时系统
B.多道批处理系统 C.实时系统 D.网络系统 正确答案: B
5.实时操作系统追求的目标是( )。 A.高吞吐率 B.充分利用内存 C.快速响应
D.减少系统开销 正确答案: C
6.在分时系统中,时间片一定,则( ),响应时间越长。 A.内存越大 B.用户数越多 C.后备队列越短 D.用户数越少 正确答案: B
7.工业过程控制系统中运行的操作系统最好是( )。 A.分时系统 B.实时系统 C.实时系统 D.网络系统
)。 正确答案: B
8.批处理系统的主要缺点是( )。 A.CPU的利用率不高 B.失去了交互性 C.不具备并行性 D.系统吞吐量小 正确答案: B
9.进程与程序之间有密切联系,但又是不同的概念。二者的一个本质区别是( )。 A.程序是静态概念,进程是动态概念 B.程序是动态概念,进程是静态概念 C.程序保存在文件中,进程存放在内存中 D.程序顺序执行,进程并发执行 正确答案: A
10.现代操作系统中引入线程以后,进程( )。 A.只是资源分配的单位 B.只是调度运行的单位
C.既是资源分配的单位,又是调度运行的单位 D.失去作用 正确答案: A
11.在一段时间内,只允许一个进程访问的资源称为( )。 A.共享资源 B.临界区 C.临界资源 D.共享区 正确答案: C
12.一个进程被唤醒意味着( )。 回答错误 A.该进程重新占有了CPU B.进程状态变为就绪 C.它的优先权变为最大
D.其PCB移至就绪队列的队首 正确答案: B
13.有9个生产者,6个消费者,共享容量为8的缓冲区。在这个生产者-消费者问题中,互斥使用缓冲区的信号量mutex的初值应该为( )。 A.1 B.6 C.8 D.9
正确答案: A
14.两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来信息,或者建立某个条件后再向前执行,这种关系是进程间的( )关系。 A.同步 B.互斥 C.竞争 D.合作
正确答案: A
15.在操作系统中引入“进程”概念的主要目的是( )。 回答错误 A.改善用户编程环境 B.提高程序的运行速度
C.描述程序动态执行过程的性质 D.使程序与计算过程一一对应 正确答案: C
16.两个进程争夺同一个资源( )。 A.一定死锁 B.不一定死锁 C.不会死锁
D.以上说法都不对 正确答案: B
17.系统调用是由操作系统提供的内部调用,它( )。 A.直接通过键盘交互方式使用 B.只能通过用户程序间接使用 C.是命令接口中的命令 D.与系统的命令一样 正确答案: B
18.操作系统的基本职能是( )。 A.提供功能强大的网络管理工具 B.提供用户界面,方便用户使用 C.提供方便的可视化编辑程序
D.控制和管理系统内各种资源,有效地组织多道程序的运行 正确答案: D
19UNIX操作系统核心层的实现结构设计采用的是( )。 A.单块式结构 B.层次结构 C.微内核结构 D.网状结构 正确答案: B
20.在进程通信中,使用信箱方式交换信息的是( )。 A.低级进程通信 B.消息传递方式 C.共享内存方式 D.管道文件方式 正确答案: B
21.在操作系统中,进程的最基本的特征是( )。 A.动态性和并发性 B.顺序性和可再现性 C.与程序的对应性 D.执行过程的封闭性 正确答案: A
22.已经获得除( )以外的所有运行所需资源的进程处于就绪状态。
A.存储器 B.打印机 C.CPU
D.磁盘空间 正确答案: C
23.以下不属于进程高级通信方式的是( )。 A.共享内存方式
B.进程互斥和同步方式 C.消息传递方式 D.管道文件方式 正确答案: B
15.如果信号量S的值是0 , 此时进程A执行P(S)操作,那么,进程A会( )。 A.继续运行
B.进入阻塞态,让出CPU C.进入就绪态,让出CPU
D.继续运行,并唤醒S队列头上的等待进程 正确答案: B
24.在执行V操作时,当信号量的值( ),应释放一个等待该信号量的进程。 A.小于0 B.大于0 C.小于等于0 D.大于等于0 正确答案: C
25.作业一旦进入内存即为执行状态,与之相关的进程在作业进入内存时予以创建,该进程的初始状态为( )。 A.运行态 B.就绪态 C.阻塞态 D.提交态 正确答案: B
26.作业调度的关键在于( )。 A.选择恰当的进程管理程序 B.选择恰当的作业调度算法 C.用户作业准备充分
D.有一个较好的操作环境 正确答案: B
27.操作系统中必不可少的调度是( )。 A.作业调度 B.中级调度 C.进程调度 D.对换 正确答案: C
28.设某作业进入输入井的时间为S,开始运行的时间为R,得到计算结果的时间为E,则该作业的周转时间T为( )。
A.T=E-S B.T=E-(S+R) C.T=(S+R)+ E D.T=E-R 正确答案: A
29.Linux系统中的进程调度采用( )。 A.先来先服务法 B.时间片轮转法 C.短作业优先法 D.抢占式优先级 正确答案: D
30.在批处理系统中,周转时间是( )。 A.作业运行时间
B.作业等待时间和运行时间之和 C.作业的相对等待时间
D.作业被调度进入主存到运行完毕的时间 正确答案: B
31.在操作系统中,作业处于( )状态时,已处于进程的管理之下。 A.后备 B.阻塞 C.执行 D.完成 正确答案: C
32.在目标程序装入内存时,一次性完成地址修改的方式是( )。 A.静态重定位 B.动态重定位 C.静态连接 D.动态连接 正确答案: A
33.最先适应分配算法把空闲区( ) A.按地址顺序从小到大登记在空闲区表中
B.按地址顺序从大到小登记在空闲区表中 e � 97@�V �?# indent:-18.0pt;mso-list: l0 level1 lfo1;tab-stops:list 39.75pt'>A. 按地址顺序从小到大登记在空闲区表中
按地址顺序从大到小登记在空闲区表中 C.按长度以递增顺序登记在空闲区表中 D.按长度以递减顺序登记在空闲区表中 正确答案: A
34.动态分区分配按照进程的需求量分配内存分区,所以( )。 A.分区的长度是固定的 B.分区的个数是确定的
C.分区的长度和个数都是确定的
D.分区的长度不是预先固定的,分区的个数是不确定的 正确答案: D
35实现虚拟存储器的目的是( )。 A.实现存储保护 B.实现程序浮动 C.扩充辅存容量 D.扩充主存容量 正确答案: D
36.下述页面置换算法中会产生Belady现象的算法是( )。 A.先进先出法
B.最近最少使用置换法 C.最近未使用置换法 D.最佳置换法 正确答案: A
37.存储管理中,页面抖动是指( )。 A.使用机器时,屏幕闪烁的现象
B.被调出的页面又立刻被调入所形成的频繁调入调出现象 C.系统盘有问题,致使系统不稳定的现象
D.由于主存分配不当,偶然造成主存不够的现象 正确答案: B
38.可重定位分区存储管理采用的地址转换公式是( )。 A.绝对地址=界限寄存器值+逻辑地址 B.绝对地址=下限寄存器值+逻辑地址 C. 绝对地址=基址寄存器值+逻辑地址 D.绝对地址=块号×块长+页内地址 正确答案: C
39.下列存储器中,速度最快的是( )。 A.高速缓存Cache B.内存
C.CPU内部寄存器 D.硬盘 正确答案: C
40.动态重定位是在程序( )期间,每次访问内存之前进行重定位。 A.执行 B.编译 C.装入 D.修改 正确答案: A
41.文件系统为每个文件另建立一张指示逻辑记录和物理记录之间的对应关系表,由此表和文件本身构成的文件是( )。 A.连续文件 B.链接文件 C.索引文件 D.逻辑文件 正确答案: C
42.下列描述不属于文件系统功能的是( )。
A.建立文件目录 B.提供一组文件操作 C.实现对磁盘的驱动调度 D.管理文件存储空间 正确答案: C
43.当前目录是/usr/meng,其下属文件prog/file.c的绝对路径名是( )。 A./usr/meng/file.c B./usr/file.c C./prog/file.c
D./usr/meng/prog/file.c
正确答案: D
44.文件的逻辑组织是( )的文件组织形式。 A.在外部设备上 B.从用户观点看 C.虚拟存储 D.目录 正确答案: B
45.下列属于文件保密机制的是( )。 A.建立副本 B.定期备份 C.设置口令 D.文件的链接 正确答案: C
46.文件系统采用二级文件目录可以( )。 A.缩短访问存储器的时间
B.解决同一用户间的文件命名冲突 C.节省内存空间
D.解决不同用户间的文件命名冲突 正确答案: D
47.用ls命令以长格式列目录信息时,若某一文件的特征在文件列表中按如下顺序显示在屏幕上:drwxrw-r-- 2 user gk 35 Oct 28 10:30 /user/asD.h 则同组用户的访问权限是( )。 A.读和执行 B.读、写、执行 C.写和执行 D.读和写 正确答案: D
48.在UNIX系统中,磁盘存储空间空闲块的链接方式是( )。 A.空闲块链接法 B.位示图法 C.空闲盘块表法
D.空闲块成组链接法 正确答案: D
49.在下述文件系统目录结构中,能够用多条路径访问同一文件(或目录)的目录结构是
( )。 A.单级目录 B.二级目录 C.纯树形目录 D.非循环图目录 正确答案: D
50.下列不属于设备分配技术的是( )。 A.虚拟分配技术 B.独占分配技术 C.共享分配技术 D.通道分配技术 正确答案: D
51.下列关于Linux系统设备管理的描述中,不正确的是()。 A.把设备作为特殊文件处理 B.将存储设备称为字符设备 C.设备名由主、次设备号构成 D.设备驱动程序可动态装卸 正确答案: B
52.在操作系统中,用户在使用I/O设备时,通常采用()。 A.设备的绝对号 B.设备的相对号 C.虚拟设备号 D.设备名 正确答案: B
53.用户编制的程序与实际使用的物理设备无关是由()功能实现的。 A.设备分配 B.设备驱动 C.虚拟设备 D.设备性 正确答案: D
.设磁盘的转速为3000转/分,盘面划分为10个扇区,则读取一个扇区的时间是()。 A.20ms B.2ms C.3ms D.1ms
正确答案: B
55.CPU处理数据的速度远远高于打印机的打印速度,为了解决这一矛盾,可采用( )。 A.并行技术 B.通道技术 C.缓冲技术 D.虚存技术 正确答案: C
56.下列设备中,不属于独占设备的是( )。 A.打印机
B.磁盘 C.终端 D.磁带 正确答案: B
57.下列关于磁盘的描述中,正确的是()。 A.减少磁盘的寻道时间可以显著改善系统性能 B.当关掉电源后,磁盘存储的内容丢失 C.磁盘属于字符设备
D.磁盘的动作不局限于机械运动,可以无限快 正确答案: A
58.为了使多个进程能有效地同时处理阵发性的输入和输出,最好使用()结构的缓冲技术。 A.多缓冲 B.SPOOLing
C.单缓冲区 D.双缓冲区 正确答案: A
59.以下不属于分布式系统特征的是()。 A.分布性 B.并行性 C.全局性 D.可定制性 正确答案: D
二、判断题
1.操作系统是整个计算机系统的控制管理中心,它对其它软件具有支配权利。因而,操作系统建立在其它软件之上。( ) A.对 B.错
正确答案: B
2.操作系统是用户与计算机之间的接口。 ( ) A.对 B.错
正确答案: A
3.在Linux系统中,用户进程既可以在用户模式下运行,也可以在内核模式下运行。( ) A.对 B.错
正确答案: A
4.程序在运行时需要很多系统资源,如内存、文件、设备等,因此操作系统以程序为单位分配系统资源。( ) A.对 B.错
正确答案: B
5.进程控制块(PCB)是进程存在的唯一标志。( ) A.对
B.错
正确答案: A
6.进程从运行状态变为阻塞状态的原因是输入或输出事件发生。( ) A.对 B.错
正确答案: A 7.进程控制块(PCB)是专为用户进程设置的私有数据结构,每个进程仅有一个PCB。( ) A.对 B.错
正确答案: B
8如同人类的族系一样,操作系统中众多的进程也存在族系关系,并构成一棵树形的进程族系图。( ) A.对 B.错
正确答案: A
9.进程之间的互斥,主要源于进程之间的资源竞争,从而实现多个相关进程在执行次序上的协调。( ) A.对 B.错
正确答案: B
10.进程执行的相对速度不能由进程自己来控制。( ) A.对 B.错
正确答案: A
11.操作系统是系统软件中的一种,在进行系统安装时可以先安装其它软件,然后再安装操作系统。( ) A.对 B.错
正确答案: B
12.UNIX操作系统是采用微内核方法实现结构设计的。( ) A.对 B.错
正确答案: B
14.进程的互斥和同步机构交换的信息量大,被归结为高级通信。( ) A.对 B.错
正确答案: B
14.一个进程被唤醒意味着该进程重新占有了CPU。( ) A.对 B.错
正确答案: B
15.进程从运行状态变为阻塞状态的原因是时间片到时。( ) A.对 B.错
正确答案: B
16.系统产生死锁的根本原因是资源有限且操作不当。因此,当系统提供的资源少于并发进程的需求时,系统就产生死锁。( ) A.对 B.错
正确答案: B
26.信号量机制是一种有效地实现进程同步与互斥的工具。信号量只能由P、V操作来改变。 A.对 B.错
正确答案: A
17.动态优先级算法允许进程的优先级在运行期间不断改变。( ) A.对 B.错
正确答案: A
18.通常,为了提高效率,赋予需要大量计算的作业较高优先级,赋予需要大量输入/输出的作业较低的优先级。( ) A.对 B.错
正确答案: B
19.一个进程在执行过程中可以被中断事件打断,当相应的中断处理完成后,就一定恢复该进程被中断时的现场,使它继续执行。( ) A.对 B.错
正确答案: B
20.程序装入内存时,内存利用率最大的装入方式是可重定位装入。( ) A.对 B.错
正确答案: B
21.采用动态重定位技术的系统,目标程序可以不经任何改动,而装入物理内存。( ) A.对 B.错
正确答案: A
22.Linux系统采用了请求分页存储管理技术和对换技术。( ) A.对 B.错
正确答案: A
23.可重定位分区存储管理可以对作业分配不连续的内存单元。( ) A.对 B.错
正确答案: B
24.Linux文件分为普通文件、目录文件和用户文件三大类。( ) A.对 B.错
正确答案: B
25.一般的文件系统都是基于磁盘设备的,而磁带设备可以作为转储设备使用,以提高系统的可靠性。( ) A.对 B.错
正确答案: A
26.在Linux系统中,常采用单空闲块链接法来实施存储空间的分配与回收。( ) A.对 B.错
正确答案: B
27.现代计算机系统中,外围设备的启动工作都是由系统和用户共同来做的。 A.对 B.错
正确答案: B
24.采用SPOOLing技术情况下,可用1台计算机代替脱机技术需要的3台计算机。 A.对 B.错
正确答案: A
28.SPOOLing系统能实现设备管理的虚拟技术,即:将共享设备改造为独占设备。它由专门负责I/O的常驻内存的进程以及输入、输出井组成。 A.对 B.错
正确答案: B
29.利用共享分配技术可以提高设备的利用率,使得打印机之类的独占设备成为可共享的、快速I/O设备。 A.对 B.错
正确答案: B
三、应用题
1.设有无穷多个信息,输入进程把信息逐个写入缓冲区,输出进程逐个从缓冲区中取出信息。设缓冲区是环形的,编号为0~n-1,in和out分别是输入进程和输出进程使用的指针,初值都是0。为使两类进程实行同步操作,设置三个信号量:两个计数信号量full和empty,一个互斥信号量mutex。full表示放有信息的缓冲区数,其初值为0。empty表示可供使用的缓冲区数,其初值为n。mutex互斥信号量,初值为1。 根据下面输入、输出进程的同步算法,填写相应的P、V操作。 输入进程Input: while (TRUE) { __(1)__; __(2)__;
信息送往buffer(in);
in=(in+1) mod n; /*以n为模*/ __(3)__; __(4)__; }
输出进程Output: while (TRUE){ __(5)__; __(6)__;
从buffer(out)中取出信息;
out=(out+1) mod n; /*以n为模*/ __(7)__; __(8)__; }
正确答案:
选项1P(empty) 选项2P(mutex) 选项3V(mutex) 选项4V(full) 选项5P(full) 选项6P(mutex) 选项7V(mutex) 选项8V(empty)
3.下表给出了作业1,2,3的提交时间和运行时间,时间单位为小时,以十进制进行计算。 表1 作业1,2,3的提交时间和运行时间
(1)若采用先来先服务调度算法,则调度次序是 1 。(3分) A.1、2、3 B.2、3、1 C.3、2、1 D.1、3、2
(2)计算各个作业的周转时间和平均周转时间。 作业1的周转时间是 2 ;(3分) 作业2的周转时间是 3 ;(3分) 作业3的周转时间是 4 ;(3分)
3个作业的平均周转时间是 5 。(2分) A. 12.0 B.10.5 C. 8.0 D.11.6
正确答案: 1 A 2 C 3 D 4 A 5 B
4.考虑下述页面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。所有内存块最初都是空的,所以,凡第一次用到的页面都产生一次缺页。
(1)当内存块数量分别为3时,试问使用最近最少置换算法(LRU)的缺页次数是 1 ; (2)当内存块数量分别为5时,试问使用最近最少置换算法(LRU)的缺页次数是 2 。 A.8 B.15 C.9 D.10 正确答案: 1 B 2 A
5.假设一个磁盘有200个磁道,编号从0~199。当前磁头正在143道上服务,并且刚刚完成了125道的请求。如果寻道请求队列的顺序是: 86, 147, 91, 177, 94, 150, 102, 175, 130
问:为完成上述请求,采用最短寻道时间优先磁盘调度算法(SSTF)时磁头移动的总量是( )。 单选题 (10 分) 10分 (难易度: 中) A.125 B.162 C.565 D.576
正确答案: B
实验题 实验一
常用命令和 vi 编辑器
桌面系统决定了用户使用系统时的“观感”。目前,Linux 系统主要采用的两种桌面系统环境是 KDE 和 GNOME。这两种环境各有特色,用户可以根据自己的喜好选择使用,如红旗 Linux 在安装时,可以选择 KDE 或 GNOME 工作站环境。
图 2-8 示出红旗 Linux 桌面版 6.0 的一个典型的 KDE 桌面界面。屏幕中间部分称为桌面,其中放有许多图标,如“我的文档”、“我的电脑”、“Firefox 浏览器”、“回收站”等。位于屏幕底部的一个长条称为面板,利用它可以启动应用程序或在已启动的程序间切换,用户也可以自己添加其他程序图标。
图 2-8 典型的 KDE 桌面界面 1.实验目的
学会 Linux 系统的基本操作和常用命令,学会使用 vi 编辑器建立、编辑、显示及加工处 理文本文件。 2.实验要求
(1)基本操作和常用命令
① 能够正确地登录和退出 Linux 系统。 ② 熟悉使用 Linux 常用命令。 (2)vi 编辑器
① 能够正确地进入和退出 vi。
② 利用文本插入方式建立一个文件。 ③ 在新建的文本文件上移动光标位置。
④ 对该文件执行删除、复原、修改、替换等操作。 3.知识准备
UNIX/Linux 系统中有多个编辑器,按功能它们分为两类: 行编辑器(如 ed,ex,edit)和屏幕编辑器(如 vi)。vi 是 visual interface 的简称,它汇集了行编辑和全屏幕编辑的特点,成为 UNIX/Linux 系统中最常用的编辑器,几乎每个 UNIX/Linux 系统都提供了 vi。 (1)进入和退出 vi
• 进入 vi 有两种方式:一种是在提示符后键入 vi,如:$ vi 创建新文件,在保存时再指定文件名。另一种是指定要编辑的文件名,如: $ vi 文件名 命名新建文件或编辑已有文件。 • 在 vi 的命令方式下有几种方法可以退出 vi 编辑器:
① :wq 把编辑缓冲区的内容写到你编辑的文件中,退出编辑器,回到 shell 下。 (其操作过程是,先输入冒号“:”,再输入命令 wq。以下命令操作相同。) ② :ZZ(大写字母 ZZ)仅当作过修改时才将缓冲区内容写到文件上。 ③ :x 与:ZZ 相同。
④ :q! 强行退出 vi。感叹号(!)告诉 vi,无条件退出,丢弃缓冲区内容。 (2)vi 的工作方式
vi 编辑器有三种工作方式: 命令方式、插入方式和 ex 转义方式。通过相应的命令或操作,在这三种工作方式之间可以进行转换,如图 2-9 所示。
图 2-9 vi 编辑器三种工作方式 (3)vi 常用命令列表
对文本编辑的命令按功能分主要包括文本输入命令、光标移到命令、文本修改命令和字符串检索等。表 2-1 列出这些常用命令的形式及功能。
4. 实验步骤
(1)登录和退出 Linux 系统
① 登录。不论是 GUI 方式或命令行方式的 Linux,在登录系统时,用户都需要输入注册名和密码。密码验证正确后,用户登录成功。
Linux 系统提供的命令需要在 shell 环境下运行。为此,要从图形界面进入 shell 界面(即命令行界面)。在桌面环境下,可以利用终端程序进入传统的命令行操作界面,进入方式有多种,如在“开始”菜单中选择“实用工具”→“终端程序”命令。 Konsole 终端程序窗口如图 2-10 所示。
图 2-10 Konsole 终端程序窗口
② 修改用户密码。用户在使用 Linux 系统的过程中,如果需要,可以使用 passwd 命令自己的用户登录密码。注意:普通用户只能修改自己的密码,管理员 root 用户可以设置任何用户的密码。
③ 退出系统。要退出终端程序,可以单击窗口右上角的“关闭”按钮,在 shell 提示符下执行 exit 命令或 logout 命令,也可按快捷键[Ctrl-D]。 (2)常用命令
表 2-2 列出了在 Linux 系统中常用命令。
使用以上简单命令,理解 Linux 命令格式。 (3)vi 编辑器 ① 进入 vi 。
② 建立一个文件,如 file.c。进入插入方式,输入一个 C 语言程序的各行内容,故意制造几处错误。最后,将该文件存盘。回到 shell 状态下。
③ 运行 gcc file.c -o myfile,编译该文件,会发现错误提示。理解其含义。
④ 重新进入 vi,对该文件进行修改。然后存盘,退出 vi。重新编译该文件。如果编译通过了,可以用 ./myfile 运行该程序。
⑤ 运行 man date > file10,然后 vi file10。 使用 x,dd 等命令删除某些文本行。 使用 u 命令复原此前的情况。
使用 c,r,s 等命令修改文本内容。 使用检索命令进行给定模式的检索。
Shell 编程 1.实验目的
(1)了解 shell 的作用和主要分类。 (2)掌握 bash 的建立和执行方式。 (3)掌握 bash 的基本语法。 (4)学会编写 shell 脚本。 2.实验要求
(1)shell 脚本的建立和执行。
(2)shell 变量和位置参数、环境变量的表示和使用。 (3)bash 中特殊字符的表示和含义。 (4)一般控制结构的格式和简单应用。 (5)算术运算及 bash 函数的简单应用。 3.shell 编程实例
下面是 6 个 shell 程序实例,供上机实验时参考。
【例 2-1】由 3 条简单命令组成的 shell 程序(文件名为 ex1)。 $ cat ex1 date pwd cd ..
【例 2-2】带有控制结构的 shell 程序(文件名为 ex2)。功能是:检测位置参数个数,若 等于 0,则列出当前目录本身;否则,对于每个位置参数,显示其所包含的子目录。
$ cat ex2 #!/bin/bash
# If no arguments, then listing the current directory. # Otherwise, listing each subdirectory. if test $# = 0 then ls . else for i do
ls -l $i | grep '^d' done fi
【例 2-3】判断给定的某一年是否是闰年的程序(文件名leapyear)。闰年的判断,如果某年号能被 4 整除而不能被 100 整除,或者能被 400 整除,那么它就是闰年;否则是平年。 $ cat leapyear #!/bin/bash
#determing if a yer is a leap year
echo \"Input a year number\" #提示输入一个年号 read year #读取输入的年号
let \"leap=year%4==0&&year%100!=0||year%400==0\" #计算给定年号是闰年吗? if [ $leap –eq 0 ] #若 leap 等于 0,则不是闰年 then echo \"$year is not a leap year. \" #输出不是闰年信息 else echo \" $year is a leap year. \" #否则,输出闰年信息 fi
【例 2-4】测试语句应用(文件名为 ex3)。 $ cat ex3
echo -n 'key in a number (1-10 ) : ' #提示输入 1-10 之间的一个数字,光标不换行 read a #读取输入的数字
if [ \"$a\" -lt 1 -o \"$a\" -gt 10 ] #如果该数小于 1 或者大于 10 then echo \"Error Number .\" #显示输入数字有错 exit 2 #退出,返回码为 2 elif [ ! \"$a\" -lt 5 ] #否则,若该数不小于 5 then echo \"It’s not less 5. \" #显示不小于 5 的信息 else echo \"It’s less 5. \" #否则,显示该数小于 5 fi #结束 if 语句
echo \"accept key in value.\" #显示接受了键入的值 【例 2-5】编写一个脚本,求费波纳奇(Fibonacci)数列的前 10 项及总和(文件名为 fb)。费波纳奇(Fibonacci)数列的形式为 1,1,2,3,5,8,...,其通项递推公式为:un=un-1+un-2 其中 n 表示项数(n≥3),即从第 3 项起,每一项都是前面两项之和。 $ cat fb
#!/bin/bash #说明本脚本是用 bash 编写的
a=1 #变量 a 存放奇数项的值,初值为 1 b=1 #变量 b 存放偶数项的值,初值为 1
echo –n –e \"$a\$b\" #显示 a 和 b 的值,中间用制表符空开。光标不换行
let \"n=a+b\" #变量 n 存放 a 与 b 之和
count=4 #变量 count 表示循环次数,初值为 4。为什么? while [ $count –gt 0 ] #当 count 值大于 0 时,则进入循环体 do #下面是循环体 let \"a=a+b\" #计算前一项的值 let \"b=b+a\" #计算后续项的值
echo –n –e \"\$a\$b\" #显示刚计算出的这两项的值 let \"n +=a+b\" #计算总和
let \"count=count-1\" #循环次数减 1 done #循环体结尾 echo #输出空行 echo \"The sum is $n\" #显示总和
【例 2-6】中国古代数学家张丘建提出的“百鸡问题”:一只大公鸡值五个钱,一只母鸡值三个钱,三只小鸡值一个钱。现有一百个钱,要买一百只鸡,要求三种鸡都有。是否可以?只须给出一个符合要求的解。
4.实验步骤
(1)利用 vi 建立一个脚本文件,其中包括 date,cal,pwd,ls 等常用命令。然后以不同方式执行该脚本。
(2)编辑并运行以上 6 个 shell 程序实例。
(3)某班有 30 名同学。求出该班“操作系统”课程考试的平均分。采用数组初始化方式接收同学的成绩。
实验二 进程管理 1.实验目的
(1)加深对进程概念的理解,尤其是进程的动态性、并发性。
(2)了解进程如何被创建和终止。 (3)学会查看进程的状态信息。 (4)学会使用进程管理命令。 (5)学会在后台运行进程。 2.实验要求
(1)理解有关进程的概念,能用 ps 命令列出系统中进程的有关信息,并进行分析。 (2)理解进程的创建及族系关系。
(3)能使用&,jobs,bg,at 等命令控制进程的运行。 (4)了解终止进程的方法。 3.知识准备 (1)进程状态
利用 ps 命令可以查看系统中进程的状态。通过使用不同的选项,ps 命令可以报告很多信息。表 2-3 列出 ps 命令输出中包含的各个域,这些域的内容对系统性能调试十分有帮助。 表 2-3 ps 命令输出常见的域
(2)信号机制
信号(signal)机制亦称作软中断,是在软件层次上对中断机制的一种模拟。异步进程可以通过彼此发送信号来实现简单通信。系统预先规定若干个不同类型的信号(如现在的Linux 和 POSIX.4 定义了 种信号),各表示发生了不同的事件,每个信号对应一个编号。运行进程当遇到相应事件或者出现特定要求时(如进程终止或运行中出现某些错误——非法指令、地址越界等),就把一个信号发送到相应进程。接收信号的进程在运行过程中要检测自身是否收到了信号,如果已收到信号,则转去执行预先规定好的信号处理程序。处理之后,再返回原先正在执行的程序。进程之间利用信号机制实现通信的过程如图 2-11 所示。
图 2-11 利用信号实现进程间通信
这种处理方式与硬件中断的处理方式有不少相同之处,但是二者又是不同的。因为信号的设置、检测等都是软件实现的。信号处理机构是系统中围绕信号的产生、传送和处理而构成的一套机构。
表 2-4 列出在 x86 平台上 Linux 内核定义的常用信号。
4.实验步骤
(1)观察进程状态
① 不带参数,输入 ps 命令,观察用户自己的进程的状态。 $ ps
PID TTY TIME CMD 632 pts/1 00:00:00 bash 1637 pts/1 00:00:00 ps
其中:PID——进程的标识号(ID)。 TTY——该进程所在的控制终端。
TIME——该进程累计执行的时间,即占用 CPU 的时间,以 hh:mm:ss 格式表示。 CMD——表示该进程所对应的命令。 说明:
(i)每个进程有唯一的 PID,即进程和它的 PID 是一一对应的。如果用户在不同时间输入同一个命令,则它们的 PID 也不相同。这是由于 Linux 命令是通过进程完成的。在不同时间运行相同命令,系统会建立不同的进程。
(ii)不同进程的 TTY 标识符可以相同,表明这些进程都是在同一个终端上建立的。
(iii)尽管用户注册进入系统已经有一段时间,而且输入命令也用去不少时间,但各进程只占用很少的 CPU 时间。因此,相应 TIME 项的值一般都是 0。
(iv)用户输入的命令名就是相应的进程名,即:命令的执行是通过建立并运行相应的进程实现的。
② 输入 ps -ef 命令
输入 ps -ef 命令,可以显示系统中运行的所有进程(包括系统进程和用户进程)的全面信息。 $ ps -ef
UID PID PPID C STIME TTY TIME CMD root 1 0 0 08:03 ? 00:00:01 init [5] root 2 1 0 08:03 ? 00:00:00[ksoftirqd/0] root 3 1 0 08:03 ? 00:00:00 [events/0]
root 4 3 0 08:03 ? 00:00:00 [khelper] ......
mengqc 3115 1 0 08:06 ? 00:00:00 kdeinit:Running... ......
mengqc 3515 3115 0 08:06 ?00:01:02 kdeinit: konsole mengqc 3556 3515 0 08:06 pts/1 00:00:00 /bin/bash ......
mengqc 3618 3556 0 11:10 pts/1 00:00:00 ps –ef
用户会看到:进程数目一下子多了许多。这是由于系统中存在许多系统进程。系统进程也称为守护进程(daemon),它们不与某台终端或某个用户相关联。系统进程不是由用户命令建立的进程,而是由系统创建的进程,专门用于执行系统管理和各种服务等功能,如进程的对换、终端的初启。系统进程定期地执行系统任务并且在这些任务之间睡眠。对于系统进程,在 TTY 字段上出现的字符是一个“?”。用户还会发现:这些系统进程的 PID 相对来说都比较小。 在本例中,我们可以看到:最后执行的命令是 ps -ef,其 PID 为 3618,PPID(即父进程 ID)为 3556;而 3556 号进程的父进程是 3515 号进程,3515 号进程的父进程是 3115 号进程,后者的父进程是 1 号进程,即 init 进程,它是系统中所有进程(除最原始的 0 号进程
外)的祖先。照此类推,可以勾画出系统中进程的族系关系。 请根据你上机时执行上面命令的实际情况,勾画出你的系统中当时所有进程的族系关系。想一想:为什么 ps 命令本身也列出来了?ps 的父进程是谁?在注册时启动了什么进程?前后两次输入 ps 命令,它们对应的 PID 相同吗?为什么? ③ 输入 ps -l 命令,会得到进程附加属性的长列表信息。
请你在机器上输入并运行 ps -l 命令,查看显示的结果。对照表 2-3 所列出的 ps 命令输出常见的域的含义,分析该命令对应进程的 PID 是多少,处于什么状态,优先级如何,其父进程是谁。 (2)进程控制 ① 后台进程
注册 shell 进程是用户执行的大多数命令(子进程)的父进程。通常情况下,在系统提示用户输入新的命令之前,shell 进程要等待其子进程(前台进程)的结束。用户可以让 shell不必等待子进程结束就可以继续接受另外的命令,其方法就是把命令放入后台运行。为了在后台运行一个命令,在该命令行的末尾要加上一个&字符,于是 shell 就立即返回一个提示符
($)。例如,输入以下命令: $ gcc f1.c f2.c f3.c -o prog& [1]16 $ �
其中,[1]表示作业号,16 是后台进程的 PID 号。
这里,gcc 是调用 C 编译程序命令,它对 f1.c,f2.c 和 f3.c 三个用 C 语言编写的文件进行编译,产生的可执行代码放入 prog 文件中。
在 ps 命令中使用-p 选项和指定的后台进程 PID 号,可以监控该进程,其格式为: $ ps -p pid
这里的 pid 是指定后台进程的 PID 号,对上面所示进程来说,pid 就是 16。 使用&在后台运行进程时应注意:
(i)如果命令执行需要很长时间才能完成,那么就要采用后台执行的方式。但是,它不适于像 vi 这种交互式的程序。 (ii)当用户在后台运行一个命令时,应该使用重定向机制把该命令的输出定向到一个文件;否则,它会在无法预测的时候在屏幕上显现出来。例如, $ grep \"mengqc\" /etc/passwd > /tmp/abc & 1972
$ ps –p 1972
PID TTY TIME CMD
[1] + Done grep \"mengqc\" /etc/passwd > /tmp/abc &
当后台进程终止时,shell 将通知用户。它只是简单地给出该进程的作业号,并不显示其PID。如上面所示。其中,[1]表示作业号是 1;+号表示该作业为当前作业,即最后一个后台程序;Done 表示该作业刚结束。
编写一个简单的 C 程序,其文件名设为 myfile.c。利用 gcc myfile.c -o prog 命令编译该文件,注意系统如何反应。然后在该命令末尾加上&(后台标志),执行它,出现什么情况? ② 作业控制 (i)挂起进程
进程正在运行期间,用户按下[Ctrl-Z]键,shell 就将该进程挂起。shell 也可以把进程从后台移到前台或者从前台移到后台。
shell 可以将当前正在运行的进程挂起,并且告诉 shell 不用等待该进程终止。当一个进程被挂起时,屏幕上就显示出该进程的作业号和命令名,形式如下所示: [1]+ Stopped command
其中,command 表示被挂起进程所对应的命令。 例如,用户当前正在运行命令: $ man ls | more
在没有全部显示完之前,按下[Ctrl-Z]键,在屏幕上会看到: [1]+ Stopped man ls | more 表示该命令被挂起了。 (ii)bg 命令和 fg 命令
一旦用户挂起一个进程,就可以用 bg 命令在后台运行这个进程,例如: $ bg %1
可把指定的作业 1 放入后台。如果没有指定作业号,就把当前作业放入后台。 前台进程使用 fg 命令,可以把一个在后台运行的进程调度到前台运行,例如: $ fg %1
把作业 1 从后台换到前台。当默认时,就把当前后台进程切换到前台。 (iii)nohup 命令
如果用户想在后台运行一个很长的进程,并且在退出系统时也不终止该进程,则可以使 用 nohup 命令来保护该进程。nohup 命令的格式是:
nohup command [ arguments...]&其中,command 表示要保护的进程所对应的命令;arguments 表示该命令的参数。如果没有指定输出重定向,则 nohup 命令将指定命令的输出重定向到文件 nohup.out。 (iv)jobs 命令
jobs 命令用来显示正在运行的所有作业的状态,例如: $ jobs
[2] +Done who|wc –cd
[1] -Stopped(SIGTTOU) man ls&
方括号中的小整数是作业号,每个作业对应一个号码。作业号之后的+表示该作业为当前作业,而-表示前一个作业。当前作业就是最后一个后台程序。在+,-号之后给出作业状态:Done表示刚结束的作业,Stopped 表示挂起的作业。每行的最后是产生该作业的命令。 (v)sleep 命令
sleep 命令使进程暂停执行若干秒,该秒数由参数指定(如 100),例如: $ sleep 100;who|grep \"mengqc\" (vi)综合练习 输入以下命令: $ sleep 60& $ sleep 30&
现在输入[Ctrl-Z]。注意被停止进程的号码,并且 shell 提示符会重新出现。然后输入命令 jobs,可以查看各作业的状态。使用 bg 命令,把睡眠 60 秒的作业放在后台运行。使用 fg 命令,把睡眠 60 秒的作业放在前台运行。当该作业完成后,运行 jobs 命令。分析输出结果。它是你所期望的情况吗? (3)发送信号
① 使用 kill 命令可以向指定的进程发送 TERM(终止)信号或指定信号。其中一些信号可以使作业中止运行。TERM 信号(15)通常使作业正常终止运行,而信号 9 可立即终止由PID 指定的进程。例如:kill -9 13 即终止 PID 为 13 的进程的运行。信号可以由信号号码(sig)或信号名(signame)指定。利用命令 kill -l 可以列出全部信号名。 ② 试做以下练习 (i)执行命令:
$ find / -name core -print >/dev/null 2>&1 &
命令 find 由根目录(用“/”表示)开始查找名为 core(可以指定另外的文件名)的文件(选项-name 的作用),结果输出(-print 的作用)重定向到文件/dev/null 中(>/dev/null 的作用),出错输出被重定向到标准输出(2>&1 的作用),整个命令在后台运行。 (ii)使用 ps 命令,确认 find 命令还在运行。 (iii)使用 kill 命令,“杀死”find 进程。 (4)减轻系统负载
Linux 提供了一些命令能够使系统运行的效率更高,其方法是把进程的负载分散到更长的时间段内。这里介绍两个常用命令:一个影响进程的优先数,另一个可以延迟命令的执行时间。 ① nice 命令
每一个进程都有一个优先数,Linux 内核用它来给进程分派 CPU 的时间。优先数根据进程自上一次占用 CPU 到现在过了多长时间以及 nice 值来确定,nice 值是-20 至 19 之间的数。
nice 值越高,命令的优先级就越低。Linux 内核进行进程调度时,总是先调度优先级高的就绪进程。反过来,一个就绪进程的优先级低,它就被排在后面得到 CPU。
ice 命令通常用于降低一个进程的优先级。每当你在进行主要的处理并且想要降低对系统的要求时,就可以用 nice 命令。例如,一个程序需要很长的运行时间,大大超过以一般优先级运行的程序,那么,就可以在后台运行该程序,并且降低其优先级。用户可以利用 nice 命令设定进程的 nice 值。但一般用户只能设定正值,从而主动降低其优先级,只有特权用户才能把 nice 的值置为负数。 nice 命令使用格式是:
nice [ -n increment ] command [ arguments...]
其中,increment 是要增加的数值,command 是 nice 命令要影响到的命令,arguments是 command 命令所用的参数。nice 命令只对刚刚启动的新进程起作用。
默认情况下,进程的 nice 值是 20。nice 命令允许将此值增大到 39。例如,下面的命令把 find 进程的 nice 值增为 35(假定当前 shell 的 nice 值为 20): $ nice -n 15 find / name core > dumps 2>&1 &
如果 nice 命令没有指定增量值,那么就假定增量值为 10,相应进程的 nice 值就变为 30。 ② at 命令
有时,用户可能想让程序在随后系统不太忙的时候去运行。 Linux 提供了 at 命令,它可以让另外的命令在随后任何指定的时间运行。
对于 at 命令来说,需要定时执行的命令是从 stdin(标准输入)中读取的输入命令,或者是使用-f 选项指定的文件中读取命令,然后予以执行。如果 stdin 对应键盘,则在结束命令时要按[Ctrl-D],用来表明输入结束。 at 命令的格式是:
at [options] time [date]
其中,options 是选项,time 和 date 表示时间和日期。时间表示一般采用 24 小时制,如 22:10,表示当天晚上 10 点 10 分。也可采用 12 小时制,则表示为 10:10pm。 例如,今天是 2016 年 7 月 28 日,指定后天下午 3 点 20 分执行文件 myjob 中的作业, 可以使用以下命令:
# at –f myjob 3:20pm 30/07/2016
at 命令会把已执行命令的标准输出发送到用户的系统邮箱中,或者用户可以指定被延迟命令的输出重定向到用户选择的一个文件中。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务