操作系统课程设计实验大纲

操作系统课程设计实验大纲
操作系统课程设计实验大纲

《操作系统课程设计》实验指导手册

苏州大学计算机科学与技术学院

2009年9月

《操作系统课程设计》实验指导手册目录

目录

一、实验环境

二、实验内容

三、准备知识

四、实验步骤

实验一安装Red Hat Linux

实验二编译Linux内核

实验三观察Linux行为

实验四系统调用

一、实验环境

硬件平台:普通PC机硬件环境。

操作系统:Linux环境,Red Hat Linux 9.0以上版本,启动管理器使用LILO。

编译环境:伴随着操作系统的默认gcc环境。

工作源码环境:一个调试的内核源码,版本不低于2.4.18。

二、实验内容

本实验侧重于Linux操作系统的认识、应用,并对Linux内核进行初步探索。实验分为四个部分,每个部分大约2次实验。所有实验完成后,将在计算机上安装一个可用的Linux操作系统,并完成至少一个的可调试内核。

1.安装Red Hat Linux

2.编译Linux内核

3.观察Linux行为

4.系统调用

三、准备知识

1.Linux的内核

Unix操作系统家族将功能分为两类。首先,内核执行时CPU处于管态;其次,所有其他操作系统部件执行时CPU处于用户态。内核负责抽象与管理一台机器的硬件资源以及这些资源在执行程序之间的共享。因为Linux实现的是一种UNIX方式的接口,资源抽象和共享模型的通用定义已经被确定了。

资源抽象(Resource abstraction)是指编写软件(通常情况)来简化必须应用于硬件的操作以使该硬件能恰当的工作。Linux将计算机部件抽象为进程和资源。一个进程是执行一个目标程序的CPU操作的一个抽象。进程抽象使得操作系统能够控制一个程序中的每个实例的执行。操作系统中的所有执行进程抽象的所有方面称为进程管理。资源管理是创建资源抽象以及在进程执行时为它们分配和回收系统资源的过程。RAM是一种系统资源。另一种系统资源是CPU。内核的其他资源包括系统的所有设备,它们具有各自的抽象模型。UNIX 试图将除CPU和可执行内存之外的每一种资源视为一个文件。

Linux中,一个进程使用资源时,通常需要对该资源的独占使用。资源管理有两个关键的方面:对获得资源的竞争和对独占使用的确保。对资源的竞争由资源管理程序控制。操作系统必须包含一个部件来负责接收使用每个资源的请求、为一个进程分配资源,以及当一个进程释放资源时进行回收。如不能满足进程的资源请求,则阻塞该进程。Linux和其他现代操作系统用模式位来确保对系统资源,包括CPU、内存和设备的独占使用。模式位使系统可以工作在管态(supervisor mode)或用户态(user mode)。在一些情况下,两个或更多进程需要共享一个资源,Linux采用有控制的共享策略。

2.内核的组织结构

Linux内核被设计和实现为单内核。硬件设备日益发展,不断包括更新的设备,完全在一个设备驱动程序中提供适当的内核支持变得日益困难。Linux通过一个新的“容器”,称为模块(module),来解决这个问题,在模块中执行内核主要部分的扩展。

2.1 Linux的中断机制

同i386体系结构中的中断机制,使用cli()和sti()两个内核函数来清除和设置中断启用标志。

2.2 使用Linux的内核服务

用户将内核看作一个大的抽象数据类型(ADT),它保持状态并在其公共接口——系统调用接口上提供大量函数。在Linux中,系统调用接口名义上由POSIX.1规范定义。一个系统调用发生时,用户进程执行内核代码。存在一个问题,如何由用户进程(处在用户态)切换到内核代码(处在管态)?

具有模式位的CPU通常也具有硬件陷阱指令。陷阱指令(trap instruction)是一条用于将CPU转移到一个预定地址(有时作为一个指令操作数的函数)并将其自身切换为管态的指令。陷阱指令并不是一条特权指令,因此任何程序都可以执行一条陷阱指令。对于系统调用F,stub过程用于调用F。stub被链接到用户空间正调用的程序。一个进程在运行期间执行对F的调用,控制被转换到stub过程而不是直接转换到内核。利用陷阱指令和stub过程可以实现由用户空间向内核空间的安全转换。

2.3 串行执行

Linux的内核函数执行时处在一个临界区,即,一旦进程调用一个系统函数,该函数通

常要运行到结束并在CPU分配给不同的进程之前返回,但是中断除外。这种类型的内核是单线程(single-threaded)的,因为在任何时刻(忽略ISR)在内核中只允许一个执行线程在执行。这至少有两个重要的意义:

1.一个内核函数可以更新各种内核数据结构而不用担心另一个进程会中断它的执行并改变相同的数据结构。竞争状态不会发生。

2.在编写一个新的内核函数时,始终注意不能编写可能阻塞并等待消息或其他只有某些另外的进程才能释放的资源的代码。这类代码可能在内核中导致死锁。

2.4 守护进程

当一台Linux机器启动时,几个称作守护进程(daemon)的对用户透明的进程也被启动,并且它们的存在对操作系统的正确运行是必需的。习惯上,守护进程是执行名字以字符―d‖结尾的程序。通过在shell里敲入以下命令来观察哪些守护进程正在Linux机器上运行:

ps aux | more

典型情况下,将发现syslogd、klogd、crond和lpd在系统上运行。

2.5 引导过程

一台i386计算机可以通过一张引导记录包含Linux引导程序而不是Windows操作系统引导程序的Linux引导盘来引导Linux。对于一个分区的硬盘来说,装载处于不同分区的不同操作系统是可能的。Windows操作系统可以通过标识一个分区为活动分区来处理多分区磁盘,系统总是从活动分区引导。Linux提供一个可以存放在系统引导记录中的特殊Linux装载程序(LILO)使用户在引导时可以选择活动分区。在这种情况下,LILO将会被载入到引导记录中以使BIOS在POST之后运行它。

在POST之后,引导记录已经被读取,并且装载程序已经将操作系统放入主存,引导过程开始运行内核代码以初始化计算机硬件。计算机通过设置CPU为管态并转移到在内核中的主入口点准备启动内核。内核初始化陷阱列表、中断处理程序、调度程序等,并初始化管理程序。然后硬件进程创建初始进程(initial process)。初始进程创建第一个有用的Linux 进程来运行init程序并开始执行一个空闲周期。在内核初始化完成以后,初始进程的唯一职责就是使用空闲CPU时间。也就是说,当没有其他进程想要使用CPU时它将占用CPU。初始进程有时也称为空闲进程(idle process)。

2.6 登录到机器

在初始化时,内核在每个可以用于支持用户登录的通信端口创建一个进程。这些进程将运行getty程序的一个拷贝。getty进程初始化自身后等待用户使用这个端口。当用户开始使用该端口时,getty运行login程序,期望一个用户标识出现在第1行并且一个口令出现在第2行。一旦端口的login程序得到了标识和口令,它通过系统的/etc/passwd文件确认用户的身份。如果本次验证成功,那么login进程改变当前目录到用户主目录并执行指定的shell 程序以便用户通过shell直接与login进程进行交互。一个登录到UNIX机器的用户只是使用一个在机器启动时创建的进程。因此用户进程通过该shell数据段和堆栈段的唯一拷贝执行一个shell程序。

3.进程与资源管理

进程管理程序负责创建程序员使用的进程抽象并提供措施以便一个进程可以创建、销毁、同步和保护其他进程。类似的,资源管理程序涉及创建合适的抽象来代表一个进程可能请求的实体(并在资源不可得时阻塞它们的执行)。除抽象外,资源管理程序必须提供一个进程用来请求、获得和释放资源的接口。

Linux内核负责处理进程调度的程序(像内核中的所有其他部分一样)只有在一个进程或者因为系统调用或者因为中断开始以管态执行时才能执行。Linux中父进程通过fork()系统调用创建一个新的任务/进程。当然,execve()系统调用也将极大的影响进程描述符的内容,因为这样会加载进程并执行一个与调用execve()时所执行程序不同的程序。Linux内核还包括一个系统调用clone()来支持线程。Linux的调度程序负责在内存中选择处于TASK_RUNNING状态的进程,为之分配CPU。schedule()内核函数可以通过中断来调用,它也作为ret_from_sys_call代码块的一部分来调用,所以它总是作为一个与用户进程或中断相关的任务来运行。

Linux中使用两种不同的同步机制,一种在内核代码自身内部,另一种为用户进程提供同步机制。内核中的同步主要是保证在当前内核代码处于临界部分时不会产生中断。外部同步机制是基于事件模型。

用户可以通过以下四种方式使用内核来执行IPC:管道(和命名管道),System V IPC,System V共享内存,套接字。

保护机制有两种形式:地址空间隔离和文件保护。

4.存储管理

Linux使用请求分页虚拟内存模型作为内存管理设计的基础。在该模型中,每个进程分配其自身的虚拟地址空间。进程引用虚拟地址,系统在访问内存地址之前将每个这种引用映射成一个主(也称为物理)内存地址。内核和硬件一起保证了虚拟内存地址的内容被放入到物理内存,并且保证相应的虚拟地址在被进程引用时绑定到正确的物理内存。内存管理程序履行如下一些常见职责:

·以物理内存页框为单位进行块的分配和回收。

·保护机制以单页为基础。

·内存共享基于页。

·通过内存层次,在辅存和主存之间向前向后移动页面来自动控制移动。

虚拟地址空间被划分成段:3GB的用户段和1GB的内核段。每个内核和用户段又进一步划分为代码段和数据段。每当进程执行时,它的状态包括一个段选择器。如果进程在用户空间执行,那么段选择器被设置为user;如果在内核段执行,则选择器被设置为kernel。

缺页处理。当进程引用一个缺页时,存储管理程序将该页从辅存拷贝到主存中。装入一页到内存页框中时,存储管理程序首先试图通过调用一个内部内核函数__get_free_pages()来为进程获得一块新的页框。如果没有可用的块,页面管理程序试图释放空间。首先是否存在可以从缓冲区中回收的块,下一步试图回收为System V共享内存保留的页框。如果仍不能满足块请求,页面管理程序就开始通过使用近似的全局最近最少使用(LRU)替代算法查看所有分配用于容纳虚拟地址空间的用户空间部分的页框。从物理内存中移出一个页面时,页面管理程序需要查看它是否是脏(dirty)的。

地址变换。Linux超越当今的CPU和内存管理单元(MMU)定义了一个独立于体系结构的存储模型,因此它包含没有用于i386实现的部件。在通用模型中,一个虚拟地址通过三级映射变换为物理地址。一个虚拟地址j被划分为4个部分:

·页目录偏移,j.pgd

·页中间目录偏移,j.pmd

·页表偏移,j.pte

·页内偏移,j.offset

如果将一个页面加载到物理内存中,虚拟地址j对应的物理地址i由下式决定:

i = PTE ( PMD ( PGD ( j.pgd ) + j.pmd ) + j.pte ) + j.offset

这里PTE代表页表,PMD代表页中间目录表,PGD代表页目录表。由于i386微处理器和兼容的MMU没有足够的硬件支持完整的三级变换过程,所以在这种体系结构中只实现了两级变换。这是通过将每个中间目录减少到一个表项来实现的。

5.设备管理

在Linux中有两种基本的设备管理方法可用:

·采用轮询判断何时设备完成了一个操作。

·采用中断。

设备驱动程序和设备通过使用主从码字来引用。主码(主设备号)与每个Linux内核将使用的设备驱动程序相关联。从码(从设备号)用于在使用特定设备驱动程序的物理设备之间进行区分。UNIX设备传统上分成块设备和字符设备。缓冲被用于块设备而不是字符设备。Linux保持了这种基本区别,但两种设备类型API之间的差别比UNIX系统中要小得多。

当机器引导时,设备驱动程序通常被注册到操作系统中。一个内核函数被用于注册设备。设备驱动程序的API与文件管理程序的文件操作API相同。UNIX试图将每一种设备视为一个文件。

6.文件管理

Linux文件管理程序定义了一个单一的文件内部视图,应用程序用它来读取和修改写在所有存储设备上的文件。每类存储设备在它的文件管理程序中实现相同的视图。Linux文件管理程序设计为让应用程序使用一组由POSIX所指定的固定函数来操作文件:open()、close()、lseek()、read()、write()、ioctl()等等。文件管理程序中一个与文件系统独立的部分处理普通工作,如检查访问权限和决定何时需要读写磁盘块。另一部分处理所有与文件系统相关的工作,如判断块在磁盘上的定位和指导设备驱动程序读写特定块。两部分结合起来使得在处理磁盘上的文件时,Linux在API级别提供了一组固定的操作,即使文件使用Windows OS、MINIX或其他操作系统写入。

Linux文件管理程序API建立在虚拟文件系统(VFS)输出的抽象文件模型上。VFS执行与系统独立的文件操作,操作系统设计人员对VFS提供了扩展以完成所有需要的与文件系统相关的操作。VFS的核心是转换。转换(switch)为用户空间程序提供了标准文件管理程序API并建立内部接口,该接口由支持MS-DOS、MINIX、Ext2等文件的不同文件系统翻译程序所使用。通过实现一个新的文件系统相关(翻译程序)的部件可以提供对一种新文件系统的支持。

一个VFS文件描述符称为一个inode。当文件打开时,每个与系统相关的文件翻译程序将外部描述符的内容转换为VFS inode格式。相反,文件关闭时,内部inode的内容被用于更新外部文件描述符。VFS也支持目录,所以它假设外部文件目录至少包含每个存储于该目录文件的名字和其文件描述符的地址。

装载文件系统。具有可移动介质存储设备的计算机,每次介质装入或移出时必须改变系统的文件结构。VFS采用传统的UNIX机制,允许这些文件系统能结合到系统的目录层次。mount命令用于向现存的目录层次添加一个新的文件系统,用新的文件系统的根结点代替以前装载文件系统的一个目录来实现。

打开文件。为了打开一个文件,文件管理程序在存储系统上搜索指定的路径名。搜索可

能是一个扩展的过程。如果搜索碰到一个安装点,那么它从一种文件系统转移到另一种文件系统并继续搜索。因此搜索可能从,如一个Ext2文件系统开始,但最终在一个MS-DOS文件系统中找到文件。对于成功打开的文件,在进程的文件描述符表中创建一表项,该表项指向打开文件表中一个叫做文件结构的表项。文件结构表项在主存中创建以后,它引用VFS 的inode。

读写文件。当文件打开时,创建struct file的一个实例。在该文件中,字段:

struct file_operation *f_ops;

指定read()、write()、lseek()、select()等函数的入口点,它们用于执行与系统相关的文件I/O 操作。同时包含的还有一组在inode中指定的默认file_operations,这样如果任何特定文件操作没有在f_ops列表中指定,那么将使用来自默认列表中的函数。这些实例的实质目标是在用户空间和辅存之间移动信息。一个文件被组织为连续的字节流,使用缓冲的方法可以极大的提高系统的性能。Linux试图使用最大限度的内存来提供I/O缓冲区。

7.了解Linux的更多信息

Linux不断的发展,有许多优秀的可利用的信息源。下面列出一些可能对你有帮助的站点:

·Linux文档工程(https://www.360docs.net/doc/1f6409515.html,/mdw/Linux.html)是有关Linux各方面文档的在线收集。

·Beck, et al.[1998]的书《Linux Kernel Internals》的第2版描述了2.0版内核的组织并解释了Linux单个部分是如何设计的细节。

·Vahalia[2000]的有关UNIX内部结构、Bach[1996]的有关UNIX System V内部结构和McKusick, et al.[1996]的有关BSD4.4内部结构的书描述了传统UNIX系统是如何构建的。

学习Linux内部结构的人必须阅读源代码。完整的源代码浏览站点http://lxr.linux.no/source对此有帮助。另外,应该在实验室的机器上有一份源代码的拷贝。它可能被放在文件系统层次的任何地方,但通常的路径在/usr/src/linux上。也就是说,linux 是包含所有源代码子树的根目录。

下面是一些有用的资源:

·https://www.360docs.net/doc/1f6409515.html,/ Linux的官方网站

·https://www.360docs.net/doc/1f6409515.html,/ 中国Linux论坛

·https://www.360docs.net/doc/1f6409515.html,/ 永远的Unix

·https://www.360docs.net/doc/1f6409515.html,/ Kernel新手上路

·https://www.360docs.net/doc/1f6409515.html,/ Linux文档项目

·https://www.360docs.net/doc/1f6409515.html,/ Linux杂志

·https://www.360docs.net/doc/1f6409515.html, 去搜索你要的东西吧:)

四、实验步骤

实验一安装Red Hat Linux 8.0

本实验使用图形化、基于鼠标的安装程序,从网络上定制安装Red Hat Linux。所讨论的课题如下:

·逐渐熟悉安装程序的用户界面;

·启动安装程序;

·选择安装方法;

·安装中的配置步骤(语言、键盘、鼠标、分区等等);

·结束安装。

1.图形化安装程序用户界面

如果你从前使用过图形化用户界面(graphical user interface,GUI),你对这一过程会比较熟悉;你只需使用鼠标在屏幕间翻阅,点击按钮,或者输入文本字段。你还可以使用[Tab]和[Enter]键在安装中浏览各屏幕。

注:如果不想使用GUI安装程序,你可以使用文本模式的安装程序。要启动文本模式安装程序,使用以下引导命令:

boot: text

本实验不提供文本模式安装步骤的介绍。

关于虚拟控制台的表示。Red Hat Linux安装程序不仅仅提供了安装进程的对话框。除了提供从shell提示下输入命令的方法外,它还提供了几种不同类型的诊断消息。安装程序在五个虚拟控制台中显示这些消息,你可以用一个组合键在其间切换。

这些虚拟控制台在你安装Red Hat Linux中遇到问题时会对你很有帮助。安装中在系统控制台上显示的消息可以帮助你准确地找到问题的症结所在。关于虚拟控制台的列表,所用的切换键组合,以及它们显示的内容,请参阅表-1。

一般来说,除非你试图诊断安装问题,你没有理由离开默认的控制台(第七号虚拟控制台)。

2.启动安装程序

要开始安装,你必须首先引导安装程序。请确定你已具备安装中将会用到的所有资料。注意,偶尔,某些硬件在安装中需要一个驱动程序盘。驱动程序盘为安装程序不支持的硬件添加支持。

你可以使用下列任何介质来引导安装程序(这要根据你的系统所能支持的而定),本实验引导盘,从网络上进行安装:

·可引导的光盘—你的机器支持可引导的光盘驱动器,并且你想执行网络或硬盘驱动器安装。

·引导盘—你的机器不支持可引导的光盘驱动器,并且你想从一个本地光盘、网络或硬盘驱动器上安装。

将引导盘插入到你的计算机的第一个软盘驱动器内,然后重新引导(或使用光盘来引导,如果你的计算机支持的话)。你可能需要改变你的BIOS设置来允许你从软盘或光盘中引导。

片刻之后,一个包含boot: 提示的屏幕就会出现。这个屏幕包括了许多不同的引导选项。每个引导选项还有一个或多个与之关联的帮助屏幕。要访问帮助屏幕,按在屏幕底部列出的恰当的功能键。

在你引导安装程序的时候,请留意两个问题:

·当你看到了boot: 提示后,如果在一分钟内不采取任何行动,安装程序会自动开始。要禁用这项功能,按帮助屏幕上的功能键之一。

·如果你按了帮助屏幕上的功能键,在帮助屏幕从引导介质中被读取时会出现稍微的延迟。

正常情况下,你只需按[Enter] 键来引导。请留意引导消息以便查看Linux 内核是否检测到了你的硬件。如果你的硬件被正确地检测到,请继续到下一个部分。如果它没有正确地检测到你的硬件,你可能会需要在专家模式下重新开始安装。

3.选择一种安装方法

你想使用何种安装方法?可用的安装方法如下所列:

·光盘

如果你有一个光盘驱动器和Red Hat Linux 光盘,你可以使用这种方法。你将需要一个引导盘或一个可引导的光盘。

·硬盘驱动器

如果你已将Red Hat Linux ISO 映像复制到本地硬盘驱动器中,你可以使用这种方法。你将需要一个引导盘。

·NFS 映像

如果是从一个NFS 服务器中使用ISO 映像或Red Hat Linux 的镜像映像来安装,你可以使用这种方法。你将需要一个网络驱动程序盘。另,NFS 安装也可以在GUI 模式中执行。本实验可采用这种模式进行安装。

·FTP

如果你从一个FTP 服务器中直接安装,使用这种方法。你将需要一个网络驱动程序盘。本实验也可采用这种模式进行安装。

·HTTP

如果你从一个HTTP(万维网)服务器中直接安装,使用这种办法。你将需要一个网络驱动程序盘。

4.通过NFS安装

NFS对话框(图-1)只有在你从NFS服务器中安装时才会出现(如果你使用网络驱动程序盘提供了驱动程序,并且在「安装方法」中选择了「NFS 映像」的话)。

输入你的NFS 服务器的域名或IP 地址。譬如,如果你是从https://www.360docs.net/doc/1f6409515.html,域的eastcoast主机上安装的话,在「NFS 服务器」字段中输入https://www.360docs.net/doc/1f6409515.html,。

接下来,输入导出目录的名称。如果NFS 服务器导出的是Red Hat Linux 安装树的镜

像,输入包含RedHat目录的目录(如果你不知道该目录的路径,请向实验指导人员咨询)。譬如,如果你的NFS 服务器包含目录/mirrors/redhat/i386/RedHat,请输入/mirrors/redhat/i386。

接下来,你会看到「欢迎」对话框。

FTP安装类似,这里不再赘述。

图-1 NFS 设置对话框

5.安装中的配置

接下来的步骤可能与本大纲有少许不一致,你可以根据屏幕提示进行操作。如果遇到问题,请向实验指导人员资讯。

5.1 欢迎使用Red Hat Linux

「欢迎」屏幕不提示你做任何输入。点击「下一步」按钮来继续。

5.2 使用鼠标来选择你想在安装中使用的语言

选择恰当的语言会在稍后的安装中帮助你定位时区配置。安装程序将会试图根据你在这个屏幕上所指定的信息来定义恰当的时区。当你选定了语言后,点击「下一步」来继续。

5.3 键盘配置

使用鼠标来选择你要在本次安装中和今后用作系统默认的键盘布局类型(例如,美国英语式)。选定后,点击「下一步」来继续。

5.4 鼠标配置

为你的系统选择正确的鼠标类型。如果你找不到确切的匹配,选择你确定会与你的系统兼容的鼠标类型。选定后,点击「下一步」来继续。

5.5 选择安装还是升级

如果安装程序在你的系统上检测到从前安装的Red Hat Linux 版本,「升级检查」屏幕就会自动出现。如果你想执行升级,选择「升级现有安装」。如果你想对要在系统上升级的软件包有更大程度上的控制,请确定选择「定制要升级的软件包」。要在你的系统上执行Red

Hat Linux 的新安装,选择「执行Red Hat Linux 的新安装」,然后点击「下一步」。本实验在机器上执行Red Hat Linux的新安装。

5.6 安装类型

选择你要执行的安装类型。Red Hat Linux 允许你选择最符合你需要的安装类型。你的选项有「个人桌面」、「工作站」、「服务器」、「定制」、和「升级」。本实验选择「定制」,选定后,点击「下一步」来继续。

5.7 磁盘分区设置

分区允许你将硬盘驱动器分隔成独立的区域,每个区域都如同是一个单独的硬盘驱动器。如果你运行不止一个操作系统,分区将特别有用。在这个屏幕上,你可以选择自动分区,或者使用Disk Druid 来手工分区。

自动分区允许你不必亲自为驱动器分区而执行安装。如果你对在系统上分区信心不足,建议你不要选择手工分区,而是让安装程序自动为你分区。要手工分区,选择Disk Druid 分区工具。

5.8 自动分区

自动分区在有关哪些数据要从系统中删除(若适用)这一方面允许你有控制权。可供你选择的选项有:

「删除系统内所有的Linux 分区」——选择该选项来只删除Linux 分区(在从前安装Linux 时创建的分区)。这将不会影响你的硬盘驱动器上可能会有的其它分区(例如:VFAT 或FAT32 分区)。

「删除系统内的所有分区」——选择这一选项来删除你的硬盘驱动器上的所有分区(这包括由其它操作系统如Windows 9x/NT/2000/ME/XP 所创建的分区或NTFS 分区)。

「保存所有的分区,使用现有的空闲空间」——选择这一选项来保留你当前的数据和分区,假设你的硬盘驱动器上有足够的可用空闲空间的话。

使用你的鼠标来选择你想安装Red Hat Linux 的硬盘驱动器。如果你有两个或两个以上硬盘驱动器,你应该选择包含本次安装的硬盘驱动器。没有被选择的硬盘驱动器,及其中的数据,将不会受到影响。要评审并对自动分区创建的分区做一些必要的改变,选择「评审」选项。选择「评审」后,点击「下一步」来向前移动,你将会看到在Disk Druid 中为你创建的分区。如果它们没有满足你的需要,你还能够对这些分区进行修改。当你选好之后,点击「下一步」来继续。本次实验采用手动分区方式,来体会一下为硬盘分区的感觉。

5.9 为你的系统分区

这一步,你必须告诉安装程序要在哪里安装Red Hat Linux。这是通过在将要安装Red Hat Linux 的一个或多个磁盘分区上定义挂载点来做到的。这时,你可能还需要创建或删除分区(请参见图-2)。

图-2 用Disk Druid 来分区

安装程序使用的分区工具是Disk Druid。除了某些较隐晦的情况外,Disk Druid 能够为典型的安装处理其分区要求。

实验中,首先删除所有已存在的分区,无论是Linux的分区还是其他系统的分区。然后,在硬盘上创建至少两个分区,它们是:根分区,挂载点为/ ,文件系统类型为ext3或者ext2;交换分区,挂载点为/swap ,文件系统类型swap。以下是一个推荐的分区方案:

·一个交换分区(至少32 MB)——交换分区用来支持虚拟内存。换一句话说,当没有足够的内存来贮存你的系统正在处理的数据时,这些数据就被写入交换区。你的交换分区的最小值应该相当于你的计算机内存的两倍和32 MB中较大的一个值。

·一个/boot 分区(100 MB)——这个挂载在/boot 上的分区包含操作系统的内核(允许你的系统引导Red Hat Linux),以及其它几个在引导过程中使用的文件。鉴于多数PC BIOS 的限制,创建一个较小的分区来贮存这些文件是较佳的选择。对大多数用户来说,100 MB 引导分区应该是足够了。

·一个根分区(1.7-5.0 GB)——这是―/‖(根目录)将被挂载的位置。在这个设置中,所有文件(除了贮存在/boot 分区上的以外)都位于根分区上。一个大小为 1.7 GB 的根分区可以容纳与个人桌面或工作站相当的安装(只剩极少空闲空间),而一个大小为5.0 GB 的根分区将会允许你安装每一个软件包。

5.10 引导装载程序配置

为了要不使用引导盘来引导你的系统,你通常需要安装一个引导装载程序。引导装载程序是计算机启动时所运行的第一个软件,它的责任是载入操作系统内核软件并把控制转交给它,然后,内核软件再初始化剩余的操作系统。

安装程序为你提供了两个引导装载程序:GRUB 和LILO。

·GRUB(GRand Unified Bootloader)是一个默认安装的功能强大的引导装载程序。GRUB 能够通过连锁载入另一个引导装载程序来载入多种免费和专有操作系统(连锁载入是通过载入

另一个引导装载程序来载入DOS 或Windows 之类不被支持的操作系统的机制)。

·LILO (LInux LOader) 是用于Linux 的灵活多用的引导装载程序。它并不依赖于某一特定文件系统,能够从软盘和硬盘引导Linux 内核映像,甚至还能够引导其它操作系统。

如果你不想把GRUB 安装为引导装载程序,点击「改变引导装载程序」。然后,你便可以选择安装LILO 或干脆不安装引导装载程序。本实验采用LILO作为引导程序,所以,请点击「改变引导装载程序」,改变引导程序为LILO。

每个可引导分区都被列出,包括被其它操作系统使用的分区。包含你的系统根文件系统的分区将有一个Red Hat Linux(GRUB)或linux(LILO)「标签」。其它分区也可以有引导标签。如果你想添加或改变其它被安装程序检测到的分区的标签,单击该分区来选择它,选定后,你可以点击「编辑」按钮来改变引导标签。在你想要的引导分区旁边选择「默认」来选择你默认的可引导OS。你选定了默认引导映像后,安装才会继续。

现在,你已选定了要安装的引导装载程序,你还可以决定要在哪里安装引导装载程序。你可以在下面两个位置之一安装引导装载程序:

·主引导记录(MBR)

这是我们推荐安装引导装载程序的地方,除非MBR 已经在启动另一个操作系统的引导装载程序,如System Commander。MBR 是你的硬盘驱动器上的一个特殊区域,它会被你的计算机的BIOS 自动载入,并且是引导装载程序控制引导进程的最早地点。如果你在MBR 上安装引导装载程序,当你的机器引导时,GRUB(或LILO)会呈现一个引导提示。然后你便可以引导Red Hat Linux 或其它任何你配置要引导的操作系统。

·你的引导分区的第一个扇区

如果你已在系统上使用另一个引导装载系统的话,我们推荐这个位置。在这种情况下,你的另外的引导装载系统会首先取得控制权。然后你可以配置它来启动GRUB(或LILO),继而引导Red Hat Linux。

如果你的系统只将使用Red Hat Linux,你应该选择MBR。对于带有Windows 95/98 的系统来说,你也应该把引导装载程序安装到MBR,因此它可以引导两个操作系统。本实验将引导程序装在MBR中。

「强制使用LBA32 (通常不需要)」选项允许你的/boot 分区超过1024 柱面限制。如果你的系统支持使用LBA32 扩展来引导超过1024 柱面限制的操作系统,并且你想把/boot 分区放置在1024 柱面之外,你应该选择该选项。如果你想给引导命令添加默认选项,请把它们输入到「内核参数」字段中。你输入的任何选项将会在每次引导时被传递给Linux 内核。

5.11 网络配置

如果你没有网络设备,你将看不到这个屏幕。如果你有网络设备但还没有配置联网(譬如,从你创建的网络驱动程序盘中引导,并在提示时输入了你的网络信息),你现在就有机会来配置它。

安装程序会自动检测到你拥有的任何网络设备,并把它们显示在「网络设备」列表中。选定网络设备后,点击「编辑」。从弹出的「编辑接口」屏幕上,你可以选择通过DHCP 来配置网络设备的IP 地址和子网掩码(若没有选择DHCP ,则手工配置),你可以选择在引导时激活该设备。如果你选择了「引导时激活」,你的网络接口就会在引导时被启动。如果你没有DHCP 客户的访问权,或者你不能肯定这里该提供什么信息,请和你的网络管理员联系。

5.12 防火墙配置

Red Hat Linux 为增加系统安全性提供了防火墙保护。防火墙存在于你的计算机和网络之间,用来判定网络中的远程用户有权访问你的计算机上的哪些资源。一个正确配置的防火

墙可以极大地增加你的系统安全性。请为你的系统选择恰当的安全级别。

5.13 语言支持的选择

你的系统上可以安装并支持多种语言。你必须选择一种语言作为你的默认语言。当安装结束后,你的系统中将会使用默认语言。如果你选择安装了其它语言,你可以在安装后改变你的默认语言。

如果你只打算在系统上使用一种语言,只选择那种语言将会节省大量磁盘空间。默认语言是你在安装中选择要使用的语言。要在你的系统上使用多种语言,具体指定要安装的语言,或者选择在你的Red Hat Linux 系统上安装所有可用语言。

5.14 时区配置

你可以通过选择你的计算机的物理位置,或者指定你的时区和通用协调时间(UTC)间的偏移来设置你的时区。

5.15 设置根口令

设置根帐号及其口令是安装过程中最重要的步骤之一。你的根帐号与用在Windows NT 机器上的管理员帐号类似。根帐号被用来安装软件包,升级RPM,以及执行多数系统维护工作。作为根用户登录可使你对系统有完全的控制权。

安装程序会提示你为你的系统设置一个根口令。你必须输入一个根口令。如果根口令没有被输入,安装程序将不允许你继续。

5.16 验证配置

如果你执行的是个人桌面、工作站、或服务器安装,请跳到下一节。如果你不必设置网络口令的话,你可以跳过这一部分。本实验跳过这一部分。

5.17 软件包组的选择

当分区被选定并按配置格式化后,你便可以选择要安装的软件包了。

除非你选择的是定制安装,安装程序将会自动为你选择多数软件包。你可以选择根据功能归类的软件包组(譬如,「X 窗口系统」、「编辑器」);单个软件包;或者两者的组合。要选择一个软件包组,点击它旁边的复选箱。本实验软件包的一些配置情况如下:·Desktop组:选择X Windows System,GNOME Desktop Environment和KDE Desktop Environment任选一个即可;

·Applications组:加上Editors,其他任意;

·Servers组:都可以不选;

·Development组:选择Development Tools,其他任意;

·System组:任意,不用选Printing Support。

5.18 准备安装

你应该看到一个为你安装Red Hat Linux 做准备的屏幕。当你重新引导系统后,一份完整的安装日志可在/root/install.log 中找到,以备今后参考。

要取消安装进程,按你的计算机的重启按钮,或者使用[Control]-[Alt]-[Delete] 组合键来重启你的机器。

5.19 安装软件包

到了这一步,在所有软件包被安装之前你将不必进行任何操作。安装的快慢要依据你所选择的软件包数量和你的计算机速度而定。

5.20 创建引导盘

要创建一张引导盘,在你的磁盘驱动器内插入一张空白的、格式化了的磁盘,然后点击「下一步」。强烈建议你创建一张引导盘。如果由于某种原因,你的系统无法使用GRUB、LILO、或第三方的引导装载程序来正确引导,引导盘将会使你能够正确地引导你的Red Hat Linux 系统。如果你不想创建引导盘,请确定在点击「下一步」按钮前选择相应的选项。如果你使用引导盘来引导你的系统(而不是GRUB 或LILO),无论何时你对内核做了些改变(包括安装一个新内核)后,你都应确定创建一张新的引导盘。

5.21 视频卡配置

安装程序现在将会给你一个视频卡列表,以供你选择。如果你决定要安装X 窗口系统软件包,你现在就有机会为你的系统配置一个X 服务器。如果你的视频卡没有出现在列表中,这说明X 可能不支持它。然而,如果你对你的视频卡有技术上的了解,你可以选择「没列出的卡」,然后试图通过匹配视频卡的视频芯片与X 服务器来配置它。

下一步,输入在你的视频卡上安装的视频内存数量。如果你不能肯定,请阅读你的视频卡文档。选择多于可用的内存不会损坏你的视频卡,但是X 服务器可能不会正确启动。如果你断定你选择的数值是不正确的,你可以点击「恢复原值」按钮来返回到建议的设置。如果你宁愿安装后再配置X 或干脆不安装,你还可以选择「跳过X 配置」。

5.22 X 配置——显示器和定制

为了完成X 配置,你必须配置你的显示器并定制你的X 设置。

(1) 配置你的显示器

安装程序会给你提供一个显示器列表。你既可以使用自动为你检测到的显示器,也可以在这个列表中另选一个。如果你的显示器没有在列表中出现,选择最恰当的「通用」型号。若选择「通用」显示器,安装程序会建议一个水平和垂直频率范围。这些数值通常在你的显示器文档中可以找到,也可从你的显示器的销售商或制作商处得到。请核对你的文档以确保这些数值被正确设置了。

安装程序为你的系统建议的水平和垂直频率范围也显示在显示器列表之下。如果你断定你所选的显示器或频率数值不正确,你可以点击「恢复原值」按钮来返回到建议的设置中。当显示器配置完毕后,点击「下一步」。

(2) 定制配置

为你的X 配置选择正确的色彩深度和分辨率。如果你执行的是定制或服务器安装,你还可以选择在安装结束后,你要将系统引导入文本还是图形化环境。除非你有特殊需要,推荐你引导入图形化环境(与Windows 环境相似)。如果你选择要引导入文本环境,你将会看到一个命令提示(与DOS 环境相似)。个人桌面和工作站安装会自动引导入图形化环境。

6.安装完成

祝贺你!你的Red Hat Linux 安装现已完成!

安装程序会提示你做好重新引导系统的准备。如果安装介质(磁盘驱动器内的磁盘或光盘驱动器内的光盘)在重新引导时没有被自动弹出,请记住取出它们。如果你没有安装并配置一个引导装载程序,你现在将需要使用你在安装过程中创建的引导盘。计算机正常的通电序列完成后,你应该看到图形化的引导装载程序提示,在这里,你可以做以下的事情:·按[Enter] 键——导致默认的引导项目被引导。

·选择一个引导标签,接着按[Enter] 键——导致引导装载程序引导与该引导标签相对应的操作系统。

·什么都不做——引导装载程序的超时时间过后(默认为五秒),引导装载程序将会自动引

导默认的引导项目。

做引导Red Hat Linux 的恰当选择。你应该看到一行行的信息往上卷。最终,你应该看到一个login: 提示或GUI 登录屏幕(如果你安装了X 窗口系统并选择要自动启动它的话)。

在你第一次启动了Red Hat Linux 机器时,你会看到设置代理屏幕。它会引导你进行Red Hat Linux 配置。使用这个工具,你可以设置系统时间和日期;安装软件;在Red Hat 网络上注册系统等等。设置代理让你能够一开始就配置环境,因此你可以马上就得心应手地使用Red Hat Linux 系统。

二、编译Linux内核

本实验将告诉你什么是Linux内核,什么是模块以及如何编译、安装一个新的内核。实验将带领你经历内核完整的编译过程,并在你的机器上安装一个最新稳定版本的Linux内核。本实验讨论的课题如下:

·内核入门

·查找并下载源代码

·配置内核

·编译和安装内核

·启动配置

1.内核入门

1.1 内核就是...Linux!

当你听到‖Linux‖这个词时你想到了什么?当我听到它时,我通常会想到一个完整的Linux软件包和其中所有包含的程序。

但是,你也许会惊奇地发现,从技术上而言,Linux是一个内核,而且只是一个内核。其余我们所通常称之为‖Linux‖(例如一个shell 和编译器)的部分实质上只是整个软件包的一部分,它们从技术上而言是与Linux(内核)是分开的。当许多人使用‖Linux‖这个词来表达“基于Linux软件包”时,每个人都会同意Linux内核是每个软件包的心脏。

1.2 与硬件接口

Linux内核的重要职责是与你系统中的硬件直接接口。内核提供了一个在裸机与应用程序间的抽象层。例如,程序本身不需要了解你的主板芯片集或磁盘控制器的细节了——它们可以在更高层次上读写磁盘。

1.3 抽象CPU

Linux内核还提供了在你系统处理器上的一层抽象——允许多个程序看起来在同时运行。Linux通过允许多个UNIX进程一起运行——而内核负责将处理器在其间分享。

一个Linux内核可以支持一个或多个CPU——而你正在使用的内核可能是“可支持-单处理器”(UP-aware)或“可支持-对称多处理器”(SMP-aware)。如果你碰巧有一块SMP 主板,但你使用的是一个UP内核,Linux将无法“看到”你多余的处理器!要解决这个问题,你需要为你的硬件编译一个特定的SMP内核。当前,SMP内核也可运行在单处理器系统上,但会有少许的性能影响。

1.4 抽象I/O

内核也负责处理非常需要的任务——抽象所有形式的I/O操作。想象一下这个后果,如果每个程序需要与你的特定硬件直接操作,当你更换磁盘控制器后,你的所有程序将无法运行了!幸运的是,Linux内核遵循UNIX的模型提供了一个简单的磁盘I/O抽象,而每个程序都能使用它。这样,你的数据库系统将不用担心是运行在一个IDE硬盘上、一个SCSI RAID 阵列或一个NFS文件系统上了。

1.5 网络为中心

Linux的一个出名之处是它健壮的网络功能,尤其是TCP/IP支持。如果你猜测TCP/IP 栈是实现在Linux内核,那你就对了!内核为需要在网络上发送数据的程序提供了一个易用、高层次的接口。在这后面,Linux内核与你的以太网卡或Modem直接接口,而且处理底层的Internet通讯细节操作。

1.6 优秀的网络支持

Linux一系列优点中出色的一点是所有有用的功能都能包含在内核中,尤其是与网络相关的。例如,你可以配置一个内核来允许你整个的家庭网络通过你Linux上的Modem访问因特网——这被称为IP Masquerading,或IP NA T。

另外,Linux内核可以被配置为载出或安装(mount)基于网络的NFS文件系统,使得其他在你LAN上的UNIX机器与你的Linux系统轻松共享数据。

1.7 启动,第一部分

当你开启你基于Linux的系统时,内核被一个引导工具,例如LILO,从硬盘载入内存。在此时,内核接管了你的系统控制。它所作的第一件事是探测并初始化它所找到的硬件——它被编译成能支持的那些。一旦硬件已经被正确初始化,它就准备开始运行进程了。它运行的第一个进程被称为‖init‖,位于/sbin目录下。然后,‖init‖启动在/etc/inittab文件中指定的其他进程。

1.8 启动,第二部分

‖init‖通常启动一个名为‖getty‖程序的多份拷贝,它等待来自控制台的登录。在getty成功处理一个登录请求后,你缺省的shell(通常是bash)被载入。一旦你进入bash,你就有能力来启动任意一个你想要的程序了。

当所有这些新的进程被启动后,内核仍在控制系统,精确地给CPU分割时间片这样每个进程将均匀地分到。另外,内核继续为各种运行中的进程提供硬件抽象和网络服务。

1.9 介绍...模块!

所有最新的Linux内核都支持内核模块。Kernel模块是非常整齐的——它们是除非需要驻留在硬盘上的内核部分。一旦内核需要一个特定模块的功能时,它从硬盘被载入,自动集成到内核中就可被使用了。另外,如果内核模块有好几分钟未被使用,内核可以自愿地将其从内存中调出——被称之为“自动清除”。

1.10 模块,第二部分

内核模块是驻留在/lib/modules目录下,而且每个模块在其文件名结尾都有一个‖.o‖。你也许会猜到,每个模块代表一个内核功能的特定组件——一个模块可能提供FAT文件系统支持,而另一个可能支持一种特殊的ISA以太网卡。

模块使得你的内核占用少量的内存空间。你可创建一个内核只包含足以启动计算机的功能,而其他的功能则在需要时被载入。由于内核能自动清除它所载入的模块,你系统的内存资源能被很好地利用。

1.11 模块——特别注意!

你是无法将所有一切放入一个模块的。由于模块是存放在磁盘上,你可启动的内核映像需要被编译入你的磁盘控制器以及对你基本文件系统(通常是ext2文件系统)的支持。如果你没有将这些重要的组件编译入你的内核映像(而是将它们作为模块来编译),然后你的内核就无法获得基本的功能来从磁盘上载入这些模块了——导致了一个“鸡生蛋、蛋生鸡”的问题!

2.查找并下载源代码

2.1 内核版本

要编译一个最新的内核,你需要首先下载它的源代码。在你下载内核的源代码前,你要知道你要找什么。首先要问你自己的问题是——你需要一份稳定的还是测试版的内核?

稳定版内核通常版本号第二位用偶数数字——例如,2.0.38、2.2.15、2.2.18和2.4.1是被认为是“稳定”的内核(分别由于其包含0、2、2和4)。如果你想尝试测试版内核,你通常需要找那些版本号第二位是奇数号码的内核。例如,2.3.99和2.1.38都是测试版内核(分别由于其包含3和1)。

2.2 内核版本历史

2.4系列的内核被认为是较新而且稳定的内核。如果“较新”和“稳定”是你想要的,查找一个版本号的第三位是最高的2.4内核(2.4.26是目前最新的版本)。

当2.4系列的内核仍在开发中,2.5系列已经开始了。这个系列是作为将被集成到2.6稳定版系列的新功能和高级功能的测试版。2.5系列到了2.5.75,其开发已经停止。开发人员已经开始着手 2.6.0。如果你喜欢冒险使用最新的技术,你可能想使用可以找到的最新的2.6系列内核。

2.3 下载内核

如果你只是想编译一个你已安装内核的新版本(例如,实现SMP支持),那不需要下载任何代码。

你可以在https://www.360docs.net/doc/1f6409515.html,/pub/linux/kernel上找到内核代码。当你进入到那后,你将发现内核的源代码按内核版本(v2.2、v2.3等),被组织到多个不同的目录中。在每个目录中,你将发现文件被冠以‖linux-x.y.z.tar.gz‖和‖linux-x.y.z.tar.bz2‖。这些就是Linux内核的源代码。你也将看到冠以‖patch-x.y.z.gz‖和‖patch-x.y.z.bz2‖的文件。这些是用来更新前面完整的内核源代码的补丁包。如果你希望编译一个新的内核版本,你将需要下载这些‖linux‖文件其中之一。

本实验编译的内核为2.6.1,请在服务器上下载(具体地址实验时提供)。

2.4 内核解包

如果你已下载一个新的内核,现在是要将其解包时候了。首先,cd /usr/src。如果这里有一个存在的‖linux‖目录,将其改名为‖linux.old‖(‖mv linux linux.old‖,以root权限)。

现在,可以解开新的内核包了。仍然在/usr/src目录下,输入

tar xzvf /path/to/my/kernel-x.y.z.tar.gz

或者

cat /path/to/my/kernel-x.y.z.tar.bz2 | bzip2 -d | tar xvf –

根据你下载的源代码是用gzip或bzip2压缩的。在输入完此命令后,你下载的内核源代码会被释放到一个新的‖linux‖目录下。注意——全套内核源代码通常将在硬盘上占用超过50兆空间!

3.配置内核

3.1 讨论配置问题

在你编译内核前,你需要配置它,配置是你精确控制在新内核中启用(禁止)哪些内核功能的机会。你也将控制哪些会被编译到内核的二进制映像(在启动时被载入)而哪些被编译到需要时载入的内核模块文件。

老式配置内核的方法是极为痛苦的过程,进入/usr/src/linux目录并输入make config命令。请放弃这种配置内核的方式——除非你想在命令行上回答几百个‖yes/no‖的问题。

3.2 配置的新途径

操作系统课程设计

课程设计报告 2015~2016学年第一学期 操作系统综合实践课程设计 实习类别课程设计 学生姓名李旋 专业软件工程 学号130521105 指导教师崔广才、祝勇 学院计算机科学技术学院 二〇一六年一月

- 1 -

- 2 -

一、概述 一个目录文件是由目录项组成的。每个目录项包含16B,一个辅存磁盘块(512B)包含32个目录项。在目录项中,第1、2字节为相应文件的外存i节点号,是该文件的内部标识;后14B为文件名,是该文件的外部标识。所以,文件目录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存i节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。UNIX 的存储介质以512B为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。UNIX中的文件系统磁盘存储区分配图如下: 本次课程设计是要实现一个简单的模拟Linux文件系统。我们在内存中开辟一个虚拟磁盘空间(20MB)作为文件存储器,并将该虚拟文件系统保存到磁盘上(以一个文件的形式),以便下次可以再将它恢复到内存的虚拟磁盘空间中。文件存储空间的管理可采用位示图方法。 二、设计的基本概念和原理 2.1 设计任务 多用户、多级目录结构文件系统的设计与实现。可以实现下列几条命令login 用户登录 logout 退出当前用户 dir 列文件目录 creat 创建文件 delete 删除文件 open 打开文件 close 关闭文件 - 3 -

read 读文件 write 写文件 mkdir 创建目录 ch 改变文件目录 rd 删除目录树 format 格式化文件系统 Exit 退出文件系统 2.2设计要求 1) 多用户:usr1,usr2,usr3,……,usr8 (1-8个用户) 2) 多级目录:可有多级子目录; 3) 具有login (用户登录)4) 系统初始化(建文件卷、提供登录模块) 5) 文件的创建:create (用命令行来实现)6) 文件的打开:open 7) 文件的读:read8) 文件的写:write 9) 文件关闭:close10) 删除文件:delete 11) 创建目录(建立子目录):mkdir12) 改变当前目录:cd 13) 列出文件目录:dir14) 退出:logout 新增加的功能: 15) 删除目录树:rd 16) 格式化文件系统:format 2.3算法的总体思想 - 4 -

操作系统课程设计报告书

题目1 连续动态内存管理模拟实现 1.1 题目的主要研究内容及预期达到的目标 (1)针对操作系统中内存管理相关理论进行设计,编写程序并进行测试,该程序管理一块虚拟内存。重点分析三种连续动态内存分配算法,即首次适应算法、循环首次适应算法和最佳适应算法。 (2)实现内存分配和回收功能。 1.2 题目研究的工作基础或实验条件 (1)硬件环境:PC机 (2)软件环境:Windows XP,Visual C++ 6.0 1.3 设计思想 首次适应算法的实现:从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。为适应这种算法,空闲分区表中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高址空间保留大的空闲区。 循环首次适应算法的实现:在分配内存空间时,不再每次从表头开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。 最佳适应算法的实现:从全部空闲区中找到能满足作业要求的、且最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表中的空闲分区要按从小到大进行排序,从表头开始查找第一个满足要求的自由分配。 1.4 流程图 内存分配流程图,如图1-1所示。

图1-1 内存分配流程图内存回收流程图,如1-2所示。

图1-2 内存回收流程图 1.5 主要程序代码 (1)分配内存 void allocate(char z,float l) { int i,k; float ad; k=-1; for(i=0;i= l && free_table[i].flag == 1) if(k==-1 || free_table[i].length

操作系统课程设计报告

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级: 13软件工程1班 提交时间: 2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。

二、环境条件 系统: WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景 计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。

(4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。 2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下:钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<

操作系统课程设计完整版内含代码

操作系统课程设计LRU页面调度算法 学号: 姓名: 学院: 专业: 班级: 指导老师: 日期:

目录 一、实验题目 (1) 二、课程设计的目的 (1) 三、设计内容 (1) 四、设计要求 (1) 五、设计思想 (1) 六、主要数据结构及其说明 (2) 七、硬件支持 (3) 八、源程序文件 (3) 九、程序运行结果 (7) 十、实验体会 (8)

一实验题目 LRU页面调度算法 二课程设计的目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际问题的机会。 1.进一步巩固和复习操作系统的基础知识。 2. 培养学生结构化程序、模块化程序设计的方法和能力。 3.提高学生调试程序的技巧和软件设计的能力。 4.提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。 三设计内容 程序应模拟实现LRU算法思想,对n个页面实现模拟调度。 四设计要求 1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。 2.对系统进行功能模块分析、画出总流程图和各模块流程图。 3.用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单。 4.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。 5.所有程序需调试通过。 五设计思想 最近最久未使用(LRU)页调度算法是选择最近最久未使用的页面予以淘汰。 算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当所要访问的页面在内存块中时,就不淘汰页面,否则,淘汰页面中时间最长的,即淘汰最近最久未使用的页面。

操作系统课程设计报告

上海电力学院 计算机操作系统原理 课程设计报告 题目名称:编写程序模拟虚拟存储器管理 姓名:杜志豪.学号: 班级: 2012053班 . 同组姓名:孙嘉轶 课程设计时间:—— 评语: 成绩: 目录 一、设计内容及要求 (4) 1. 1 设计题目 (4) 1.2 使用算法分析: (4)

1. FIFO算法(先进先出淘汰算法) (4) 1. LRU算法(最久未使用淘汰算法) (5) 1. OPT算法(最佳淘汰算法) (5) 分工情况 (5) 二、详细设计 (6) 原理概述 (6) 主要数据结构(主要代码) (6) 算法流程图 (9) 主流程图 (9) Optimal算法流程图 (10) FIFO算法流程图 (10) LRU算法流程图 (11) .1源程序文件名 (11) . 2执行文件名 (11) 三、实验结果与分析 (11) Optimal页面置换算法结果与分析 (11) FIFO页面置换算法结果与分析 (16) LRU页面置换算法结果与分析 (20) 四、设计创新点 (24) 五、设计与总结 (27)

六、代码附录 (27) 课程设计题目 一、设计内容及要求 编写程序模拟虚拟存储器管理。假设以M页的进程分配了N

块内存(N

操作系统课程设计报告

课程设计说明书 设计题目:操作系统课程设计 班级:信息学管理与信息系统2011级 学号: 2 姓名:克乾

山东科技大学2013年12 月11 日

课程设计任务书 学院信息科学与工程专业信息学管理与信息系统班级2011-2 克乾 一、课程设计题目:操作系统课程设计 二、课程设计主要参考资料 (1)Abraham Silberschatz & Peter Baer Galvin & Greg Gagne. Operating System Concepts(第七版影印版). 高等教育. 2007.3. (2)c++面向对象程序设计电子工业 (3)计算机操作系统(第三版)电子科技大学 三、课程设计应解决的主要问题: (1)CPU调度算法的模拟实现 (2)死锁相关算法的实现 (3)磁盘调度算法的实现 四、课程设计相关附件(如:图纸、软件等): (1)程序源代码 (2) 五、任务发出日期:2013-10-1 课程设计完成日期:2014-1-1

指导教师签字:

指导教师对课程设计的评语成绩: 指导教师签字: 年月日

设计1 CPU调度算法的模拟实现一、设计目的 利用C++编写CPU调度算法,实现先来先服务调度算法FCFS、优先级调度算法PS、短作业优先调度算法SJF、时间片轮转调度算法RR的运行过程和实现的结果,针对模拟进程,利用编写的CPU调度算法对需要运行的进程进行调度。进行算法评价,计算平均周转时间和平均等待时间。 二、设计要求 针对模拟进程,利用CPU调度算法进行调度,最后要进行算法评价,计算平均周转时间和平均等待时间,并且输出调度结果和输出算法评价指标。 调度所需的进程参数由输入产生(手工输入或者随机数产生)。 三、设计说明 时间片轮转算法需要输入相应的时间片,所以独立编写一个程序,系统主体结构如下:

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告学院:计算机学院 专业班级:13软件工程1班 提交时间:2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。 二、环境条件 系统:WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景

计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。 (4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。 2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下: 钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<

操作系统课程设计

湖南科技大学计算机科学与工程学院 操作系统课程设计报告 ******** *** 目录 实验一 Windows 进程管理 实验二 Linux 进程管理 实验三 互斥与同步 实验四 银行家算法的模拟与实现 实验五 内存管理 指导老师: *** 完成时间: **** ** **

实验六磁盘调度 实验七进程间通信 实验一 Windows进程管理 一、实验目的 1 )学会使用VC编写基本的Win3 2 Consol Application (控制台应用程序)。 2)2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟 悉操作系统的进程概念,理解Windows进程的"一生”。 3)3)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步 的基本程序设计方法。 二、实验内容和步骤 (1)编写基本的 Win32 Consol Application 步骤1:登录进入 Windows系统,启动VC++ 6.0。 步骤2:在“ FILE”菜单中单击“ NEW”子菜单,在“ projects ”选项卡中选择 “Win32 ConsolApplication ”,然后在“ Project name 处输入工程名,在“Location ”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“ FILE”菜单中单击“ NEW”子菜单,在“ Files ”选项卡中选择“ C++ Source File ” ,然后在“ File ”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5 :在“开始”菜单中单击“程序” -“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的 debug子目录,执行编译好的可执行程序,列出运行结果(如果运行不成功,则可能的原因是什么?) 如果运行不成功可能是路径有问题或者没有通过编译。

操作系统课程设计报告

; 一、概述 课程设计目的、意义: 课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。 主要任务: 模拟文件系统设计是设计和实现一个简单的文件系统。内容包括: 1.建立文件存储介质的管理机制 2.建立目录(采用一级目录结构) 3.文件系统功能(显示目录、创建、删除、打开、关闭、读、写) ~ 4.文件操作接口(显示目录、创建、删除、打开、关闭、读、写) 二、系统设计 课程设计的系统设计: 本系统模拟一个文件管理系统,要完成对文件的基本操作,文件的基本操作有文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。系统建立了文件目录树,存储文件系统中的所有文

件。对于用户名下的文件,用文件目录树的分枝来存贮。采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作就行了。 整体设计框架: 系统初始化界面是由创建用户存储空间,管理文件,退出系统三个模块组成。用户创建由创建用户存储空间,进入目录,删除用户存储空间,显示所有用户存储空间,等模块组成。然后各个模块再由一些小模块组成。其中创建文件,打开关闭文件,读写文件等文件操作模块包括在进入目录模块里面。 三、系统实现 课程设计主要内容的实现程序代码: 《 #include <> #include <> #include <> typedef struct file{ char name[10]; struct file *next; }File; typedef struct content{ ! char name[10]; File *file;

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级:13软件工程1班 提交时间:2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。 二、环境条件

系统:WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景 计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。 (4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。

2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下:钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<

操作系统(一个小型操作系统的设计与实现)课程设计

南通大学计算机科学与技术学院操作系统课程设计报告 专业: 学生姓名: 学号: 时间:

操作系统模拟算法课程设计报告 设计要求 将本学期三次的实验集成实现: A.处理机管理; B.存储器管理; C.虚拟存储器的缺页调度。 设计流程图 主流程图 开始的图形界面 处理机管理存储器管理缺页调度 先来先服务时 间 片 轮 转 首 次 适 应 法 最 佳 适 应 法 先 进 先 出 L R U 算 法

A.处理机调度 1)先来先服务FCFS N Y 先来先服务算法流程 开始 初始化进程控制块,让进程控制块按进程到达先后顺序让进程排队 调度数组中首个进程,并让数组中的下一位移到首位 计算并打印进程的完成时刻、周转时间、带权周转时间 其中:周转时间 = 完成时间 - 到达时间 带权周转时间=周转时间/服务时间 更改计时器的当前时间,即下一刻进程的开始时间 当前时间=前一进程的完成时间+其服务时间 数组为空 结束

2)时间片轮转法 开始 输入进程总数 指针所指的进程是 否结束 输入各进程信息 输出为就绪状态的进程的信息 更改正在运行的进程的已运行时间 跳过已结束的程序 结束 N 指向下一个进程 Y 如果存在下一个进程的话 Y N 输出此时为就绪状态的进程的信息 时间片轮转算法流程图

B.存储器管理(可变式分区管理) 1)首次适应法 分配流程图 申请xkb内存 由链头找到第一个空闲区 分区大小≥xkb? 大于 分区大小=分区大小-xkb,修改下一个空闲区的后向指针内容为(后向指针)+xkb;修改上一个空闲区的前向指针为(前向指针)+xkb 将该空闲区从链中摘除:修改下一个空闲区的后向地址=该空闲区后向地址,修改上一个空闲区的前向指针为该空闲区的前向指针 等于 小于延链查找下 一个空闲区 到链尾 了? 作业等待 返回是 否 登记已分配表 返回分配给进程的内存首地址 开始

操作系统课程设计35815

课程设计说明书(操作系统) 题目:进程调度 院系:计算机科学与工程学院 专业班级:信息安全13-2 学号:20133029xx 学生姓名:xx 指导教师:xx 2015年12月15日

安徽理工大学课程设计(论文)任务书计算机科学与工程学院

安徽理工大学课程设计(论文)成绩评定表

摘要 现代计算机系统中,进程是资源分配和独立运行的基本单位,是操作系统的核心概念。因而,进程就成为理解操作系统如何实现系统管理的最基本,也是最重要的概念。进程调度是进程管理过程的主要组成部分,是必然要发生的事件。 在现代操作系统中,进程的并发机制在绝大多数时候,会产生不断变化的进程就绪队列和阻塞队列。处于执行态的进程无论是正常或非正常终止、或转换为阻塞状态,都会引发从就绪队列中,由进程调度选择一个进程进占CPU。 进程调度的核心是进程调度的算法.在本课程设计中,用良好清晰的界面向用户展示了进程调度中的时间片轮转调度算法。在最终实现的成果中,用户可指定需要模拟的进程数,CPU时间片和进程的最大执行时间,并且选择需要演示的算法,界面将会动态的显示进程调度过程及各个队列的变化。通过此进程调度模拟系统,用户可以对时间片轮转调度算法有进一步以及直观的了解。 关键词:进程,调度,PCB,时间片轮转

目录 1.设计目的 (6) 2.设计思路 (7) 3.设计过程 (9) 3.1流程图 (9) 3.2算法 (9) 3.3数据结构 (13) 3.4源代码 (14) 4.实验结果及分析 (23) 4.1 使用说明 (23) 4.2程序演示 (24) 5.实验总结 (27) 6.参考文献 (28)

操作系统课程设计报告

操作系统课程设计实验报告 实验名称:进程控制 姓名/学号: 一、实验目的 学习、理解和掌握Linux与windows的进行控制系统调用的功能,熟悉主要的几个系统调用命令的格式和如何利用系统调用命令进行编程。通过学习,理解如何创建一个进程、改变进程执行的程序、进程和线程终止以及父子进程的同步等,从而提高对进程和线程控制系统调用的编程能力。 二、实验内容 设计并实现Unix的“time”命令。“mytime”命令通过命令行参数接受要运行的程序,创建一个独立的进程来运行该程序,并记录程序运行的时间。 三、实验环境 CPU: Inter ×2 2.10GHz RAM: 3.00GB Windows 7 旗舰版 Linux Ubuntu 10.04 编译: VS2010 四、程序设计与实现 4.1进程控制系统的调用 4.1.1 windows进程控制调用程序中使用的数据结构及主要符号说明 SYSTEMTIME starttime,endtime; //进程开始时间和结束时间 PROCESS_INFORMATION pi //该结构返回有关新进程及 //其主线程的信息 STARTUPINFO si //该结构用于指定新进程的主窗口特性4.1.2 linux进程控制调用程序中使用的数据结构及主要符号说明 struct timeval starttime,endtime //进程开始时间和结束时间 pid_t pid //进程标志符

4.2 程序流程图 图1 windows进程控制调用图2 linux进程控制调用程序运行流程图程序运行流程图 五、实验结果和分析 5.1 windows实验结果和分析

操作系统课程设计

计算机科学技术学院 操作系统原理课程设计报告 题目:进程管理系统 专业: 班级: 姓名: 学号: 指导老师: 年月日

《操作系统原理》课程设计任务书 一、课程设计题目(任选一个题目) 1.模拟进程管理 2.模拟处理机调度 3.模拟存储器管理 4.模拟文件系统 5.模拟磁盘调度 二、设计目的和要求 1.设计目的 《操作系统原理》课程设计是网络工程专业实践性环节之一,是学习完《操作系统原理》课程后进行的一次较全面的综合练习。其目的在于加深对操作系统的理论、方法和基础知识的理解,掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。 2.基本要求: (1)选择课程设计题目中的一个课题,独立完成。 (2)良好的沟通和合作能力 (3)充分运用前序课所学的软件工程、程序设计、数据结构等相关知识 (4)充分运用调试和排错技术 (5)简单测试驱动模块和桩模块的编写 (6)查阅相关资料,自学具体课题中涉及到的新知识。 (7)课题完成后必须按要求提交课程设计报告,格式规范,内容详实。 三、设计内容及步骤 1.根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么。

2.根据实现的功能,划分出合理的模块,明确模块间的关系。 3.编程实现所设计的模块。 4.程序调试与测试。采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果; 5.结果分析。程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。 6.编写课程设计报告; 设计报告要求:A4纸,详细设计部分主要叙述本人的工作内容 设计报告的格式: (1)封面(题目、指导教师、专业、班级、姓名、学号) (2)设计任务书 (3)目录 (4)需求分析 (5)概要设计 (6)详细设计(含主要代码) (7)调试分析、测试结果 (8)用户使用说明 (9)附录或参考资料 四、进度安排 设计在学期的第15、16周进行,时间安排如下:

操作系统含课程设计随堂练习修订稿

操作系统含课程设计随 堂练习 集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]

随堂练习提交截止时间:2017-12-15 23:59:59 当前页有10题,你已做10题,已提交10题,其中答对10题。 1.(单选题) 操作系统是基本的特征是() A、并发 B、共享 C、虚拟 D、异步 答题: A. B. C. D.(已提交) 参考答案:A 问题解析: 2.(单选题) 下面不属于操作系统设计目标的是() A、提高资源利用率 B、提高系统吞吐量 C、用户操作计算机更方便 D、并行执行多个进程 答题: A. B. C. D.(已提交) 参考答案:D 问题解析: 3.(单选题) 历史上最早出现的操作系统是() A、单道批处理系统 B、多道批处理系统 C、分时系统 D、实时系统 答题: A. B. C. D.(已提交) 参考答案:A 问题解析: 4.(单选题) 实时操作系统必须在()内处理完来自外部的事件。 A、响应时间 B、周转时间 C、被控对象规定时间 D、调度时间 答题: A. B. C. D.(已提交) 参考答案:C 问题解析: 5.(单选题) 操作系统是对()进行管理的软件。 A、软件 B、硬件 C、计算机资源 D、应用程序 答题: A. B. C. D.(已提交) 参考答案:C 问题解析: 6.(单选题) 配置了操作系统的计算机是一台比原来的物理计算机功能更强的计算机,这样的一台计算机只是一台逻辑上的计算机,称为()计算机。 A、并行 B、真实 C、虚拟 D、共享 答题: A. B. C. D.(已提交) 参考答案:C 问题解析: 7.(单选题) 操作系统中采用多道程序设计技术提高了CPU和外部设备的() A、利用率 B、可靠性 C、稳定性 D、兼容性 答题: A. B. C. D.(已提交)

计算机操作系统课程设计

计算机操作系统课程设计 班级:计091-1 姓名: 学号: 使用语言:C++ 指导老师: 学院:

一、系统要求 1、实验目的 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。 2、实验内容 为linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少4条); login 用户登陆 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 (2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。

二、系统分析 1、设计思想 本文件为二级文件系统,即要实现对文件的增删改查,同时又具备登陆系统、注册用户的功能,各个用户之间的文件系统互不干扰。 本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。 系统采用结构体来存储用户、文件目录、文件数据内容: 0 48*5 48*5+44*50 48*5+44*50+264*200 每个分区都是由结构体组成,每个个去的结构体的个数由格式化系统是决定。

整个系统的编码构成主要分为: Allstruct.h 定义了每个分区的结构体; Mysys.h 声明了对系统操作的各种方法;Myuserfile.h 声明了对文件操作的各种方法; Mymain.cpp 整个系统的主函数,操作入口; Mysys.cpp 包含了mysys.h,实现了操作系统的各种方法;Myuserfile.cpp 包含了myuserfile.h,实现了操作文件的各种方法; 2、主要数据结构 Allstruct.h文件的内容: struct s_user //用户区结构体 { long isuse; //是否使用 char name[20]; //用户名 char psd[20]; //密码 long address; //目录地址 };

操作系统课程设计报告模板

中国石油大学(华东)操作系统课程设计报告 姓名: 学号: 成绩: 目录

实验一、螺旋矩阵 (3) 实验二、用Shell程序实现文件的批量管理 (4) 实验三、驱动下的螺旋矩阵程序 (7) 实验四、哲学家进餐问题 (10) 实验五、NCURSE程序框架 (14) 实验一、螺旋矩阵

一、实验任务 用C语言编写一个螺旋矩阵程序,实现输入行数和列数即可形成A~Z的螺旋矩阵,并用Makefile完成编译。 二、实验环境和工具 VMware Workstation红帽子 Linux-2.4.20-8 三、关键代码 1、螺旋矩阵实现代码(SpiralMatrix.c) #include #define N 10 int main() { int row,col,i,j,x,y,startNum; int dx[4]={0,1,0,-1};//方向 int dy[4]={1,0,-1,0}; int Matrix[N][N]; printf("请输入行数和列数:"); scanf("%d %d",&row,&col); for (i=0;i=0&&x=0&&y

新操作系统课程设计

江苏大学京江学院 JIANGSU UNIVERSITY 操作系统课程设计 文件管理系统 学院名称:京江学院 专业班级:J计算机1401 学号:4141110020 学生姓名:潘庆 指导教师:林琳 2017年 1 月

一、课设目的 操作系统是计算机专业的一门专业课,也是计算机专业考研课程,但操作系统比较抽象,有的同学一学期完了都还很难理解进程、内存管理等一些概念和原理,操作系统课程设计的目的就是通过设计的实验,让同学们真正理解进程的实现,内存管理的机制,达到理解概念,了解实现原理。同时也进一步巩固程序设计与数据结构的实践技能,实现整个大学阶段实践技能不断线的目的。 二、课设题目 实现一个简单的文件管理系统 (1)具有文件目录(一级或者多级) (2)对指定大小的磁盘(设共1GB,每个块为1MB),建立位示图进行管理 (3)文件操作,包括新建、查看属性、删除 新建文件:给出文件名、大小、建立时间等信息,系统为其分配硬盘空间,并记录在文件目录中 查看属性:给出文件名,可以输出该文件的所有属性,以及该文件所占用的物理块号。 删除文件:给出文件名,实现文件的删除 (4)文件系统操作:显示文件列表、显示磁盘空间剩余大小、输出位示图。 三、系统功能结构

四、主要数据结构 创建文件:creatfile<文件名>,即创建一个指定名字的新文件,在目录中增加一 项,不考虑文件的内容,对于重名文件,给出错误信息。 删除文件:deltefile<文件名>,即删除一个指定名字的已创建文件,若文件不存在 则给出错误信息。 输出文件列表:disp(),即显示指定目录下的全部文件和第一级子目录,若无指定 目录,则显示当前目录下的相应内容。 输出文件属性:disp2(),即给出文件名,可以输出该文件的所有属性,以及该文件所占用的物理块号。 输出位示图:bit_map(),即输出当前状态下磁盘盘块的使用情况。 五、系统使用说明 文件管理系统主菜单界面(通过输入对应数字进入相应功能子菜单)

操作系统课程设计题目

操作系统课程设计 一、课程设计题目 实现一个模拟操作系统。 二、课程设计的目的 通过模拟操作系统原理的实现,加深对操作系统工作原理理解,进一步了解操作系统的实现方法,并可练习合作完成系统的团队精神和提高程序设计能力。 三、小组人数 建议3~4人一组共同完成模拟系统的实现。 四、编程语言 建议使用VC、VB、C#、Java等Windows环境下的程序设计语言,以借助这些语言环境来模拟硬件的一些并行工作。 五、课程设计内容 模拟采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。 六、课程设计具体要求和内容 1.文件管理和用户接口 文件管理和用户接口部分实现的主要是单用户的磁盘文件管理部分,包括文件的逻辑结构、物理结构、目录、磁盘分配回收、文件的保护和用户接口的实现。 ⑴文件的逻辑结构 文件的逻辑结构采用流式结构; 文件的内容均采用文本文件; 系统中有两种文件,一种是存放任意字符的文件,一种是可执行文件。可执行文件的内容就是模拟系统内进程的程序体。 文件中要有一种特定命令的“可执行”文件,该文件中的命令有: x=?; 给x赋值一位数 x++; x加1 x--; x减1 !??;第一个?为A,B,C中某个设备,第二个?为一位数,表示使用设备的时间(由于没有实际设备,所以无法知道设备何时工作完成,所以假定一个数,这个数随着系统时间增加而递减,减到0时,认为是设备工作完成); end. 表示文件结束,同时将结果写入文件out,其中包括文件路径名和x的值。 ⑵磁盘模拟 用一个文件disk1模拟磁盘c,用一个文件disk2模拟磁盘d。两个磁盘一样大小,磁盘的每个盘块64字节,模拟磁盘共有128块。第0、1块存放文件分配表,第2块存放根目录,其余存放子目录和文件。 ⑶目录结构 目录结构采用树型目录结构。 ①目录项内容(8个字节): 目录名、文件名:3个字节; 扩展名:2个字节(可执行文件扩展名为ex,目录没有扩展名); 目录、文件属性:1字节(1位标识是文件还是目录,1位标识只读还是非只读,1位是隐藏属性,标识显示还是不显示); 起始盘块号:1个字节; 文件长度:1字节(目录没有长度)。

《计算机操作系统》课程设计(2010年版)

《计算机操作系统》课程设计 一、设计题目 1.绘制描述事件先后顺序的前驱图。(2人)4分 ●建立前驱图的数据结构描述; ●建立绘制前驱图的例程,包括结点和有向边; ●可以删除、添加结点或有向边; ●可用鼠标在窗口的任意位置指点,确定结点或有向边位置; ●可以拖动现有结点的位置,与该结点相连的有向边也随之移动; ●可以将前驱图存入文件,从文件中取出; 2.绘制简单程序片段的前驱图。(2人)* 4分 ●建立前驱图的数据结构描述; ●可以从键盘或对话框接收程序片段; ●可将程序片段存入磁盘文件或从文件中取出; ●对程序片段进行词法分析,得出各语句之间的依赖关系; ●画出各语句间的前驱图; 3.Intel 80x68系列CPU的环保护机制:分析CIH病毒代码。(1人)3分 ●查找CIH病毒代码资料; ●分析代码; ●找到CIH病毒绕过CPU环保护机制的方法; ●分析代码的工作流程,画出相应的流程图。 ●写出分析报告; 4.多进程/线程编程:临界区控制、线程互斥与同步。(1人)3分 ●设置两个进程/线程,一个执行计算N:=N+1,另一个将N的值输出到窗口; ●为减慢进程/线程的执行速度,可以在程序中插入Sleep(1000)语句,1000表示 程序停顿1000ms,; ●在窗口上显示结果; ●设法调整两个进程/线程的执行顺序,使之出现教材P29上所列出的(1)、(2)、 (3)三种情况; ●设置互斥信号量,保证两线程互斥使用共享变量N; ●设置同步信号量,保证两线程按指定顺序运行; 5.多进程/线程编程:生产者-消费者问题。(1人)5分 ●设置两类进程/线程,一类为生产者,一类为消费者; ●建立缓冲区的数据结构; ●随机启动生产者或消费者; ●显示缓冲区状况; ●随着进程/线程每次操作缓冲区,更新显示; 6.多进程/线程编程:读者-写者问题。(1人)5分 ●设置两类进程/线程,一类为读者,一类为写者; ●随机启动读者或写者; ●显示读者或写者执行状态; ●随着进程/线程的执行,更新显示;

相关文档
最新文档