《操作系统》作业部分参考答案1

更新时间:2023-04-28 23:39:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第2 章:Linux 操作基础

2-5 已知有当前目录有如下文件:arp,egp,ggp,icmp,idp,ip,ipip ,pup,rawip,rip , tcp, udp。写出以下echo命令的输出。

1) echo *ip 显示:ip,ipip,rawip,rip,

2) echo ?dp显示:idp, udp,

3) echo [aegi]?p显示:arp, egp, ggp, idp

2-8 解释下列文件类型和存取权限

1) drwxr-xr-x :

目录文件,属主可打开目录查看内容、可增删目录内容和可进入该目录;同组及其它用户可进入目录和查看目录内容

2) -rwx —x—x:普通文件,属主可读写运行,同组用户只能运行

3) crw-rw --- :

字符设备,属主和同组用户可读写,不可运行;其它用户不能操作使用它

2-9用户主目录的访问权限是700,改目录下memo文件的访问权限是777,其它人可以读取这个文件吗?为什么?

不可以读memo文件,,700意味着其它用户进入不了也打开不了主目录

2-13给出命令将.profile文件覆盖到主目录下的backup目录下

cp -i .profile ./ backup

2-14某文件mafile的权限为-rw-r—r-,增加所有人可执行权限,应使用什么命令?chmod a+x mafile

2-20已知项目源代码都存放在-/project目录下,后缀名为“ .c”或“ .h”。用一个命令统计原代码的行数。

wc -l *.[ch]、或cat ./ project/*.[ch]|wc -

第4 章:Linux 编程基础

4- 2,源文件myproc.c和misc.c, misc.c用到数学库函数

1) 给出将两个源文件直接编译成可执行文件prog 的命令

gcc -o prog myproc.c

gcc -o prog misc.c -math ; math 是用至U libmath.so 数学库的库名

2) 两个源文件分别编译成目标文件myproc.o和misc.o的命令

gcc -c myproc.c

gcc -c misc.c -math ; math 是用至U libmath.so 数学库的库名

3) 将两个目标文件链接生成可执行文件prog 的命令

gcc -o myproc.o misc.o

4- 3,修改例4.3的程序使之改变文件的属性,(提示curse函数库中的attron()及attroff()函数,查联机手册man curs_attr)

1

原文件

源文件hello3.c

#include “print.h”

main ()

{ char my_string[] = “Hello world! ”; my_print(my_string);

}

源文件print.h void my_print(char *);

源文件print.c #include #include void my_print(char *str)

{ initscr(); /* 进入curses 全屏显示模式,清屏幕*/ move(5,15); /*移动光标到屏幕

( 5,15)坐标处*/ printw ( %s”,str); /* 向curses屏幕输出字符串*/

refresh(); /*刷新物理屏幕,显示出字符串*/

sleep(5); /*程序暂停5 秒*/

endwin(); /*结束全屏模式,恢复行模式*/

}

gcc -o hello3 hello3.c print.c -lcurses

改源文件print.c #include

#include void my_print(char *str)

{ initscr(); /*进入curses全屏显示模式,清屏幕*/

attron(A_UNDERLINE); /* 加下划线*/

move(5,15); /*移动光标到屏幕( 5,15)坐标处*/

printw ( %s”,str); /* 向curses屏幕输出字符串*/

refresh(); /*刷新物理屏幕,显示出字符串*/

sleep(5); /*程序暂停5 秒*/

attroff(A_UNDERLINE); endwin(); /*结束全屏模式,恢复行模式*/

}

第9 章:操作系统接口

9-2,什么是作业?作业和进程有何关系和区别作业是用户向系统提交事务的基本单位,进程是系统执行任务和调度资源的基本单位。作业对应一个或几个进程。作业调度是宏观的,进程调度是微观的。作业处于运行态时,所对应的一个或几个进程的运行却是断断续续的。

9-12,Shell 内部命令与外部命令有何区别?

内部命令是shell 的基本命令,有cd 等几十个,直接执行无需编译链接。外部命令是是以代码为基础编译链接而成的可执行文件

第5 章:进程管理

5- 5 为何有几种运行模式、用户如何访问系统资源修改系统的关键设置需要特权,故LINUX 有核心态特权模式和用户态低权限模式。用户通过系统调用函数访问系统资源

5- 6 Linux 进程的必备资源有哪些?运行需要的内存地址空间,及所需的文件及信号等5- 8 Linux 如何创建进程?写时复用技术的目的?

利用fork ()函数(复制法)创建,提高进程的创建效率

5- 11 进程调度的功能?策略?

提高CPU 使用效率,总体上加快进程运行。先进先出法;短进程优先法;时间片轮转法;优先级调度法

2

5- 16 临界资源与临界区,进程的互斥与同步一次仅允许一个进程使用的资源。是访问临界资源的程序片段。互斥使进程排他性使用临界资源。

同步是进程间协调运行步骤的方式,如合作处理缓冲区数据

5- 20 线程与进程区别?(1)线程是进程内的一个执行实体或执行单元。

(2)进程和线程的区别:(a)不同进程的地址空间是独立的,而同一进程内的线程共享同一地址空间。(b)在引入线程的操作系统中,进程是资源分配和调度的单位,线程是处理机调度和分配的单位,资源是分配给进程的,线程只拥有很少资源,因而切换代价比进程切换低。

第6 章:存储管理

6- 1 存储管理的主要功能

对内存储器进行分配、保护和扩充,把程序使用的逻辑地址映射成内存空间地址

6- 2 逻辑地址?物理地址?为何转换?逻辑地址:经编译后的目标程序所用的地址。目标代码通常采用相对地址的形式,其首地址为0,其余指令中的地址都是相对首地址来编址。

物理地址:程序在内存占用的实际地址,物理地址的集合称为物理地址空间,它是一个一维的线性空间。

符号地址:高级语言源程序中由符号代表的地址。是编译前的代码的存储地址。因为程序必须装入内存后系统才能运行时,故不能用逻辑地址在内存中读取信息,必须将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射(地址变换),通过硬件实现。

6- 3 静态地址变换与动态地址变换区别?

静态地址变换:程序装入内存前一次性完成地址转换。特点:程序在内存中不可移动。动态地址变换:在程序执行过程中,由动态地址变换机构实现地址转换(设置一个基地址寄存器--重定位寄存器。当一个进程被调度运行时,把它所在分区的起始地址装入到该寄存器中;在程序运行过程中,当需要访问内存单元时,硬件就自动地将其中的相对地址加上基地址寄存器的内容,形成实际的物理地址,然后按该地址去执行)。特点:程序在内存中可移动、可共享、可不连续存放。

6- 6已知页面大小2KB,及某进程页表(页面0/1/2/3分配的页帧号5/10/4/7), 求逻辑地址5678 对应的物理地址

5678=2048*2+1582,在第2 页面,物理地址2048*4+1582=9774

6- 7 如何实现页存储保护与存储扩充?

保护:CPU 对程序要访问的地址进行检查,若有越界或越权的访问则终止进程的运行。在地址转换时通过长度和基址寄存器及硬件防止了越界,通过设置进程的访问权限、区分用户与核心态的保护工作模式防止了越权的访问扩充:分覆盖、交换与虚拟存储器技术。覆盖技术:由用户编程指定程序块间的覆盖关系。用户看到的是实际大小的内存。交换技术:系统将暂时不能运行的进程换出内存,以容纳更多的进程。用户看到的也是实际大小的内存。虚拟存储技术:程序运行中由系统动态地完成内存与外存之间的交换。用户看到的是一个比实际内存大得多的“虚拟内存”。

6- 9 Linux 的内存管理方案,x86 上如何处理分段的?

Linux 系统采用请求页式存储管理方案,可提供4GB 的虚拟存储空间。x86 平台上的Linux 系统采用了二级分页机制:把所有页表项按1K 为单位划分为若干个子表,称为页表(最多1K 个)。另用一个页目录表来记录每一个子表的位置。页表和页目录表都是

1K 项长(4KB)。

x86 使用段式管理机制,在此基础上启用分页管理机制(CR0 寄存器PG 位置1)可以

3

运行Linux 系统。实现地址转换的硬件是MMU ,将虚拟地址经过段式和页式变换后转换成物理地址:线性地址=段基址+段内位移。Linux利用共享0基址段的方式,使x86的段式映射实际不起作用。于是虚拟地址与线性地址一样,只需页式映射就可以转换成物理地址。

6-10 Linux 的进程地址空间是什么?它与物理空间有什么联系?进程的地址空间是指进程可以使用的全部线性地址的集合,每个Linux 进程拥有4G 地址空间,内核空间:最高的1G ,供内核代码使用;所有进程通过执行系统调用内核代码而共享此空间。用户空间:较低的3G ,供进程代码使用。是进程的私有空间。

内核空间的代码常驻内存,线性地址高端的1G 空间地址,经过页表映射转换成物理地址,处于内存的低端1G 空间。

用户的3G 空间是进程建立后产生的各种虚存区空间。其中代码及数据表区段与硬盘的可执行文件对应(即硬盘的映像文件)。即将运行的虚存区的少量部分通过页表映射被装入内存,系统为进程按需动态调页。当进程运行过程中发生缺页中断,缺页中断处理程序从磁盘中将所需的页装入物理内存,并更新页表项。当系统中内存不足时,通过内核交换进程kswapd 来实现页面淘汰功能,将其交换到磁盘交换空间中。

6- 11 Linux 的内存分配与回收采用什么算法?有什么特点?

分配:伙伴(Buddy)算法:找到空闲区链表中2A i大小的块。或从大块中分裂,空闲块可能遇到伙伴再合并。

回收:也是伙伴算法,过程与分配算法相反,会进行伙伴合并。Linux 的内存回收是主动的。

增加连续内存空间几率,提高运行效率,但可能牺牲内存利用率

第7 章:文件管理

7- 1 文件?文件系统与功能?文件:具有符号名字的一组相关元素的有序集合。通常存放在外存中。文件系统:包括实施文件管理的软件和被管理的文件。文件管理软件是内核中的模块,文件按特定的格式存放在磁盘分区中。

功能:提供文件访问接口,实现文件的“按名存取”。实施对文件的操作,包括建立、读写、检索、修改、删除等操作;实现外存空间的管理,包括分配、回收和重组等;实现对文件的共享、保密和保护措施;

7- 5 Linux 的文件系统采用的逻辑结构与物理结构?

逻辑结构是流式文件,物理结构采用多重索引方式。

7- 8在Ext文件系统中,超级块、组描述符、i节点是什么及用途?超级块:用来指示文件系统类型标识、数据块大小、总块数和i 节点数、空闲块数和i 节点数等,超级块记录了文件系统的基本信息。组描述符:指示块组中块位图、i 节点位图和i 节点表的位置等,组描述符记录了块组的描述信息。

i 节点:包含文件说明信息和索引表两部分,块组中所有可用的i 节点都集中存放在一起,形成i 节点表。说明信息包括文件属主、权限、类型、长度、时间戳、链接接数等信息。索引表是指向物理数据块的索引指针。i 节点记录了文件FCB 主部。

7- 10 什么是虚拟文件系统,作用?与实际文件系统的关系?

虚拟文件系统VFS 是位于磁盘文件系统之上的接口层,它负责接受来自上层的文件操作请求,利用下层的实际文件系统完成对文件的读写等操作。作用:屏蔽了各种实际文件系统的差异,为用户提供了统一的文件操作接口。虚拟文件系统必须和实际文件系统一起才能构成一个完整的文件系统。采用统一的数据结构描述各种实际文件系统,虚拟文件系统只存在于内存中,在系统启动之后才建立完成,并在系统关闭时撤销。

7- 12 VFS的inode与Ext的i节点有什么关系?

4

VFS i节点(inode):描述实际文件的信息,对应文件的磁盘i节点。还包含i节点操作集指针、文件操作集指针、地址映射指针等。文件打开时建立,关闭时撤销。

VFS i节点(inode)内容来自Ext文件的i节点:通过VFS的目录项(dentry)与实际文件目录项的关联(是映射关系) ,找到Ext 的i 节点,当文件打开时,将其复制到VFS的i节点(inode)中。

7- 14 VFS 打开文件的主要操作是什么,文件描述符fd 是什么,它的作用?每当进程打开一个文件时,在内存中构建该文件的VFS 对象:建立该文件的目录(路径分量)、读入i 节点信息、创建描述该文件的file 结构(内有一个指向文件操作集的指针f_op)。同时VFS还为进程提供了统一的文件接口(task_struct中的fs与files指针):一个用于访问文件系统的接口fs_struct和一个用于访问文件的接口file_struct。其中fs_struct有指向文件所在目录的指针,files_struct由指向对象的文件描述符fd[i] 数组构成。文件描述符fd 是指向打开对象file 的指针。文件描述符fd 的作用是个指针,指向文件的file 结构,是文件进行读写运行的基本参数。

第8章:设备管理

7、什么是虚拟设备,其关键技术是什么?虚拟设备是一种在一类物理设备上模拟另一类物理设备,将独占设备转化为共享设备,从而提高系统效率。

其关键技术是在高速共享设备上采用spooling 技术。即在外存开辟缓冲区,称为“I/O 井”。用户进程需要与设备交换数据时,只对I/O 井高速读写数据,由spooling 系统控制在适当的时候将I/O 井中的数据传输给实际设备。对用户进程来说,I/O 井就是一台虚拟的高速外设。

9、什么是设备驱动程序?其主要功能是什么?设备驱动程序是直接操纵设备控制器的软件。它将上层的I/O 请求转化为控制器命令,操纵控制器完成数据的传输。

其主要功能有:设备初始化与复位;设备的读写;设备的控制;设备的检测。

10、什么是设备的独立性,Linux 如何实现设备的独立性? 设备的独立性:应用程序与设备之间的独立性。应用程序使用逻辑设备,由I/O 驱动软件操作物理设备。设备独立性使得应用程序不必关心具体设备的细节,也不受底层设备变化的影响。

Linux 系统把所有设备统一当作成文件来看待,只要安装它们的驱动程序,就可以象使用文件一样使用这些设备,而不必知道它们的具体存在形式。Linux 实现设备独立性的手段是通过分层软件结构(上层设备文件,用户通过设备文件名访问设备;下层设备驱动程序,系统通过主设备号和次设备号指定相应的设备驱动程序),把设备纳入文件系统的管理之下,使进程通过文件系统的接口来使用设备。

13、Linux 打开设备文件的操作涉及哪些层面上的初始化操作?

Linux 打开设备文件的操作涉及3 个层面上的初始化操作:

1)文件系统层面:生成VFS 对象并提供进程接口。

2)设备驱动程序层面:初始化驱动程序,为控制器分配IRQ 号、DMA 号及缓

冲区等资源。

3)设备层面:初始化设备,中断使能及DMA 使能

14、VFT 如何将设备操作映射到驱动操作函数上?

设备文件打开后,建立起VFS file对象,设备文件file的f_op指针将文件操作函数直接映射到设备驱动的函数上。所以用户通过VFS 访问设备文件时(用户进程使用read(),write(),ioctl()来访问),就是对设备的IO 操作。

18、Linux 的IO 调度算法及应用?

为提高块设备的I/O 性能,Linux 安排了I/O 调度层,经过合并和排序,优化操作顺序(如减少磁头移动)。10调度算法的原理是“电梯算法”及其改进型,有4

5

种:1)最终期限(Deadline),适用于数据库。2)预测(AS),适用于服务器。3)完全公平排队(CFQ),适用于多媒体、多用户和桌面系统。4)空操作(不排序),适用于嵌入式系统。

20、中断处理为何要分上下部?上下部操作有何区别为了提高中断处理的效率,Linux 将中断处理过程分为上半部和下半部两个部分。上半部的工作由中断处理程序完成,下半部的工作推迟到合适的时机完成。

中断处理程序(上半部)的功能是应答硬件和登记中断。上半部有严格的时限,可以很快地结束,以便响应设备的后续中断。

下半部是以内核线程的方式实现的,由内核在适当的时机调度执行。

6

本文来源:https://www.bwwdw.com/article/to6q.html

Top