操作系统实验1(编译内核)实验指导书
操作系统实验报告

篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解windows 2000的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows 2000中进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional、visual c++6.0企业版。
三、实验内容和步骤第一部分:程序1-1windows 2000 的gui 应用程序windows 2000 professional下的gui应用程序,使用visual c++编译器创建一个gui应用程序,代码中包括了winmain()方法,该方法gui类型的应用程序的标准入口点。
:: messagebox( null, “hello, windows 2000” , “greetings”,mb_ok) ;/* hinstance */ , /* hprevinstance */, /* lpcmdline */, /* ncmdshow */ )return(0) ; }在程序1-1的gui应用程序中,首先需要windows.h头文件,以便获得传送给winmain() 和messagebox() api函数的数据类型定义。
接着的pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的exe文件连接起来。
这样就可以运行简单的命令行命令cl msgbox.cpp来创建这一应用程序,如果没有pragma指令,则messagebox() api函数就成为未定义的了。
这一指令是visual studio c++ 编译器特有的。
接下来是winmain() 方法。
其中有四个由实际的低级入口点传递来的参数。
操作系统原理实验指导

3、实验题
(1)设计一个内存分配模拟程序。假定在计算机系统作业后备队列中有六个等待调度运行的作业,参与分配的内存大小为32KB,采用简单页式管理,每个页帧的大小为1KB。根据要求进行内存的分配和回收。要求打印内存分配表。有关作业的组织和作业有关参数的设置请自行设计,要大致符合实际情况。
main()
{
int i;
if (fork())
{
i=wait();
printf(“It is parent process.\n”);
printf(“The child process, ID number %d, is finished.\n”,i);
}
else{
print(“It is child process.\n”);
(2)自选设计一个进程调度算法,并加以实现。
实验三存储器管理
1、目的与要求
目的:存储器管理是操作系统重要的组成部分,提高存储器的效率始终是操作系统研究的重要课题之一。虚拟存储技术是用来扩大存储容量的一种重要方法。学生应独立地使用一种开发工具或高级语言编写几个常用的存储分配算法,并能设计一个存储管理的模拟程序,对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的理解,巩固所学的知识。
操作系统实验指导
操作系统是计算机的最重要的系统软件,它在计算机中具有核心地位,其作用是对计算机系统资源进行统一的调度和管理,提供各种强有力的系统服务,为用户创造灵活而又方便的使用环境。一个精心设计的操作系统能极大地扩充计算机系统的功能,充分地发挥系统中各种资源的使用效率,提高系统工作的可靠性。
操作系统原理是计算机科学与技术专业的一门主要专业课程,它涉及计算机系统中各种软、硬资源管理的实现原理与方法,内容非常丰富,综合性非常强,并且还具有很强的实践性。只有把理论与实践紧密地结合起来,才能取得较好地学习效果。
计算机操作系统实验指导计算机系统调用

使用内核编译法添加系统调用
为了验证系统调用是否成功,编写验证代码如下。 #include <stdio.h> #include <linux/kernel.h> #include <sys/syscall.h> #include <unistd.h> int main() { long int a = syscall(三三三); printf("System call sys_helloworld reutrn %ld\n", a); return 0; }
如图地执行结果,我们得到sys_call_table地址:ffffffffabe00一a0 三. 编写Makefile文件,可参考实验指导书地内容。 四. 编译并装入模块 # sudo make //编译 # sudo insmod hello.ko //装入模块 # lsmod //该命令查看所有模块,用以检查hello是否被装入系统 # sudo rmmod hello.ko //卸载模块
三三三 六四 helloworld
sys_helloworld
使用内核编译法添加系统调用
六. 配置内核 # cd /usr/src/linux-四.一六.一0 # sudo make mrproper # sudo make clean # sudo make menuconfig 七. 编译与安装内核(与第七章类似) # sudo make -j八 # sudo make modules -j八 # sudo make modules_install # sudo make install 八. 重启系统 # uname -r 查看此时地内核版本
编译验证代码: # gcc hello.c
四川大学计算机操作系统 实验一 熟悉Linux命令

实验一 熟悉Linux命令
选择开始->程序->VMware->VMware Workstation,运行虚拟机:
登陆linux系统:帐户root,密码123456
实验一 熟悉Linux命令
鼠标和键盘在某一时刻只能由一个系统占用。两 个设备在两个系统之间的切换: ①鼠标点击VMware的工作窗口,进入Linux系统; ②在Linux状态下按Ctrl+Alt回到windows系统。 登陆Linux系统: 使用用户名“root” 注意:由于root是超级管理员,所以不要运行大 的删除命令。 本试验没有用到图形化界面,只用终端即可
实验一 熟悉Linux命令
1.1实验目的 (1)通过在Linux系统终端下执行一些基本命令, 初步建立对Linux系统的了解,会使用man命令查 找这些命令的使用帮助。 (2)理解/proc作为虚拟文件系统的作用。 (3)学习Linux内核、进程、存储等资源的一些重 要特征。
实验一 熟悉Linux命令
实验一 熟悉Linux命令
shell的特殊字符 (1)通配符*、? ,使用通配符可以表示多个文件: ls /etc/a* 列出/etc目录下以a打头的 所有文件名。 ls /etc/a?i* 列出/etc目录下以a打头的,第二个为任一字符, 接下来的字符为i的文件。 (2)sort命令:从所给文件中按行读取正文,并按照第一 个字母的顺序排序,然后将结果到标准输出(屏幕),如: (假设当前目录有文件animals) $ sort animals bee 屏幕输出第一行 cat 屏幕输出第二行 dog 屏幕输出第三行
操作系统实验报告哈工大

计算机操作系统课程实验报告专业信息管理与信息系统班级 1203601学号 120360117姓名乐云指导教师周学权计算机操作系统课程实验报告专业信息管理与信息系统班级 1203601学号 120360114姓名郭鑫指导教师周学权操作系统实验实验1 使用虚拟机安装系统 4学时【实验目的】1.了解虚拟机软件的使用。
2.了解使用虚拟机安装Windows及Ubuntu操作系统。
【实验内容】1. 安装虚拟机软件VirtualBox。
2. 配置VirtualBox环境安装WindowsXP,并在虚拟机中启动windowsXP。
3. 配置VirtualBox环境安装Ubuntu 10.10,并在虚拟机中启动Ubuntu。
【实验环境】VirtualBox4.0Windows XPUbuntu 8.04【实验过程】一、创建虚拟机首先运行VirtualBox,单击左上角的“新建”。
单击下一步。
出现如下图的界面,在名称后输入自己起的名字,如test选择自己想要安装的系统类型和版本,本次试验是安装windows xp系统设置完成后,单击下一步。
接下来是设置虚拟机的内存大小,本次实验操作的计算机内存为4GB,所以我选择分配给我的虚拟机的内存为512MB,然后单击下一步。
接着创建虚拟硬盘,选择创建新的虚拟硬盘,单击下一步。
选择虚拟硬盘的类型,默认选择了VDI类型,单击下一步。
接下来选择为动态扩展类型,因为计算机的存储空间不大。
单击下一步。
动态扩展:如果你为你的虚拟磁盘分配的是10G空间,虚拟磁盘占用真实磁盘空间的范围就为0~10G。
固定大小:如果你为你的虚拟磁盘分配的是10G空间,虚拟磁盘占用真实磁盘空间永远不是10G,不管虚拟磁盘空间是否被全部使用。
选择虚拟机在本地磁盘中的位置和大小,单击下一步。
确认虚拟机的详细情况,点击下一步。
这时我们已经成功的创建了一个虚拟机了,接下来我们要开始配置这个虚拟机安装操作系统选择刚才创建的虚拟机,然后单击上方的“开始”弹出了首次运行向导,单击下一步。
内核编译的步骤

内核编译的步骤内核编译是指将Linux内核源代码转换为可执行的二进制文件的过程。
本文将介绍内核编译的详细步骤,以帮助读者了解并掌握这一过程。
第一步:获取内核源代码要进行内核编译,首先需要获取Linux内核的源代码。
可以通过官方网站或开源社区下载最新版本的内核源代码,也可以从版本控制系统中获取。
第二步:配置内核在进行内核编译之前,需要对内核进行配置。
配置内核的目的是根据具体需求选择合适的功能和选项。
可以使用make menuconfig、make xconfig或make config等命令进行配置。
第三步:编译内核配置完成后,就可以开始编译内核了。
在终端中切换到内核源代码目录,并执行make命令。
编译过程可能需要一段时间,取决于计算机性能和内核源代码的大小。
第四步:安装内核编译完成后,可以将生成的内核安装到系统中。
可以使用make install命令或手动将编译生成的内核文件复制到/boot目录,并修改引导加载程序的配置文件。
第五步:更新引导加载程序安装完内核后,需要更新引导加载程序,使其能够启动新安装的内核。
可以使用grub2-mkconfig、grub-mkconfig、update-grub 等命令更新引导加载程序的配置文件。
第六步:重启系统完成内核编译和引导加载程序的配置后,需要重启系统以使新内核生效。
在重启过程中,选择新安装的内核并等待系统启动。
第七步:验证新内核系统重启后,可以通过执行uname -r命令来验证新内核是否成功安装。
如果显示的内核版本是刚刚安装的新内核版本,则说明内核编译成功。
第八步:配置内核模块除了编译内核本身,还可以编译和加载内核模块。
内核模块是一种动态加载的代码,可以在运行时添加或删除。
可以使用make modules和make modules_install命令编译和安装内核模块。
第九步:定制内核在掌握了基本的内核编译步骤后,还可以根据具体需求进行内核定制。
可以通过配置内核选项和功能来满足特定的需求,例如优化性能、减小内核体积等。
操作系统原理实验报告

操作系统原理实验报告一、实验目的操作系统是计算机系统中最为关键的软件之一,它负责管理和控制计算机的硬件和软件资源,为用户和应用程序提供一个方便、高效、稳定的运行环境。
本次实验的目的在于通过实际操作和观察,深入理解操作系统的核心原理和关键机制,包括进程管理、内存管理、文件系统管理、设备管理等方面,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C++。
三、实验内容及步骤(一)进程管理实验1、进程创建与终止编写程序,使用系统调用创建一个新的进程,并在新进程中执行特定的任务,如打印一段文本。
观察新进程的创建过程和资源分配情况。
编写程序,实现父进程等待子进程终止,并获取子进程的退出状态。
2、进程调度编写程序,模拟多个进程的并发执行,设置不同的优先级和时间片。
观察进程的调度顺序和执行时间,分析调度算法的效果。
(二)内存管理实验1、内存分配与释放编写程序,使用动态内存分配函数(如 malloc、new 等)申请一定大小的内存空间,并进行读写操作。
观察内存的分配和释放过程,检查是否存在内存泄漏。
2、内存分页与分段了解操作系统的内存分页和分段机制。
编写程序,模拟内存分页和分段的过程,展示地址转换和页面置换算法的效果。
(三)文件系统管理实验1、文件创建与读写编写程序,创建一个新文件,并向文件中写入一定的数据。
读取文件中的数据,并进行验证。
2、文件目录操作编写程序,实现对文件目录的创建、删除、遍历等操作。
观察文件目录的结构和变化。
(四)设备管理实验1、设备驱动程序了解设备驱动程序的基本概念和工作原理。
编写一个简单的设备驱动程序,实现对特定设备的控制和数据传输。
2、设备中断处理模拟设备中断的产生和处理过程。
编写中断处理程序,处理设备中断事件。
四、实验结果与分析(一)进程管理实验结果与分析1、进程创建与终止成功创建了新进程,并在新进程中打印出指定的文本。
计算机操作系统实验报告

计算机操作系统实验报告一、实验目的本次计算机操作系统实验旨在深入了解计算机操作系统的工作原理和核心功能,通过实际操作和观察,增强对操作系统的认知和理解,提高解决实际问题的能力。
二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019硬件配置:Intel Core i5 处理器,8GB 内存,512GB 固态硬盘三、实验内容与步骤(一)进程管理实验1、创建进程使用 C++语言编写程序,通过调用系统函数创建新的进程。
在程序中,设置不同的参数和条件,观察进程的创建过程和资源分配情况。
2、进程调度编写模拟进程调度的程序,实现不同的调度算法,如先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)等。
通过改变进程的到达时间、执行时间和优先级等参数,观察不同调度算法对系统性能的影响。
3、进程同步与互斥使用信号量和互斥锁等机制实现进程之间的同步与互斥。
编写多进程程序,模拟生产者消费者问题、读者写者问题等经典的同步互斥场景,观察程序的运行结果,分析同步互斥机制的有效性和性能。
(二)内存管理实验1、内存分配实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。
通过模拟内存请求和释放的过程,观察不同算法下内存的使用情况和碎片产生的情况。
2、虚拟内存配置系统的虚拟内存设置,观察虚拟内存的工作原理。
编写程序访问超过物理内存大小的数据,观察系统如何利用虚拟内存进行数据交换和页面置换。
3、内存保护设置内存访问权限,编写程序尝试越界访问内存,观察系统的保护机制如何防止非法访问和错误操作。
(三)文件系统实验1、文件操作使用系统提供的文件操作接口,进行文件的创建、读写、删除等操作。
观察文件在磁盘上的存储方式和文件系统的目录结构。
2、文件权限管理设置文件的访问权限,包括读取、写入、执行等权限。
通过不同用户身份访问文件,观察权限管理的效果和安全性。
3、磁盘调度实现不同的磁盘调度算法,如先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描算法(SCAN)等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一虚拟机平台下的Linux内核编译
步骤一、实验准备:将windows下的Linux-2.4.32内核复制到虚拟机中。
一般有三种方法可以实现:虚拟磁盘、文件共享、网络设置。
下面介绍的是虚拟磁盘的方法:
我们已经将Linux-2.4.32内核源代码的压缩文件放入虚拟磁盘,并在FTP上共享。
1.请从FTP服务器上将实验指导书以及虚拟磁盘拷贝到E盘根目录下。
2. windows平台下启动虚拟机VMware, VMWare中安装虚拟硬盘:
1)安装前建议先把内存调大一些,这样后面编译的速度会快一些。
(Memory,调到512M)
2)点击Add
3)点击Next
上述步骤完成后点击Finish 。
观察发现:虚拟机中将出现两个磁盘,一个是原有的磁盘,另一个是虚拟磁盘,相当于对本机外接了一个磁盘。
(请将设置完成后的虚拟机中出现两个磁盘的界面截图,一个是6G ,另一个106M )。
4.启动Linux操作系统
在启动过程中可以见到当前只有一个可选择内核,内核版本是Linux2.4.20。
我们本次实验的目的是在虚拟机下重新编译一个新的内核,内核版本是Linux2.4.32.完成本实验后,重启虚拟机将出现两个可选择内核。
5.将虚拟磁盘安装到/mnt/mydisk目录下.(mount命令),如图:
1)先用fdisk –l命令查看虚拟磁盘是否“连接”成功。
记下虚拟磁盘名称(/dev/sdb)。
2)进入到mnt目录下创建mydisk目录,该目录作为访问虚拟磁盘的入口,此时该目录为空。
3)返回根目录root,并安装虚拟磁盘:mount /dev/sdb /mnt/mydisk
6.安装完成后,mydisk目录下出现了虚拟磁盘中的文件,如图。
其中Linux-2.4.32.tar.gz就是待编译内核的源代码。
将该文件复制(cp)到本地磁盘的/usr/src目录下,并且解压缩(tar –xzvf),如图。
当然,这两个操作也可以通过图形用户(GUI)界面来完成。
(拷贝和解压缩都需要一些时间,请耐心等待)
7.解压完成后,就可以开始编译操作系统Linux-2.4.32了(见步骤二)。
步骤二:Linux内核编译
1.开始前先返回根目录/root,用uname –a命令查看Linux当前内核信息,(并截图)
2.进入到/usr/src/Linux-2.4.32目录下
依次运行如下命令:(每个命令后虚拟机做相应操作需要一些时间,请耐心等待)
make mrproper:完全清除上一次编译内核时的所有配置以及生成的文件(如图)。
make clean:清除大部分文件。
make menuconfig :基于文本选单的配置界面,选择操作系统的基本模块。
2.输入make menuconfig后将出现蓝色界面,选择操作系统的模块。
(完成下述配置后请截图)。
M:表示编译成模块,*表示编译进内核,< >表示不编译。
1)选择处理器
Processor type and features--->Processor family--->386
2)Ram Disk驱动
Block devices--->
< * > RAM disk support
(4096) Default RAM disk size (NEW)
< * > Initial RAM disk (initrd) support
3)文件系统
File systems--->
[ * ] Ext3 journalling file system support
[ * ] JBD (ext3) debugging support
4)BusLogic驱动
< * > SCSI support--->
SCSI low-level drivers --->
< M >BusLogic SCSI support
5)Ipaddr补充:
Fusion MPT device support --->
Fusion MPT (base + ScsiHost) drivers
(ipaddr注:此处一定要选M,不能是*,更不能不选,否则,make install报错{No Module mptbase found for kernel})
Fusion MPT misc device (ioctl) driver
3. make dep (建立编译时所需的从属文件。
注意:如果内核从未编译过,此步可跳过)
4. make clean (清除内核编译的目标文件。
注意:如果内核从未编译过,此步可跳过)
5. make bzImage (注意大小写。
这一步才是真正编译内核)
内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。
如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以我直接用make bzImage来编译。
6. make modules (编译可加载模块)
7. make modules_install (安装可加载模块) 注意modules和install中间的下划线。
安装成功后,系统会在/lib/modules目录下生成一个2.4.32子目录,里面存放着新内核的所有可加载模块。
8. make install (安装新内核)
注意:make install的时候可能会出现如下错误信息:
No module BusLogic found for kernel 2.4.32 mkinitrd failed
此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。
解决方式是直接将BusLogic.o文件复制过去:
#mkdir /lib/modules/2.4.32/kernel/drivers/scsi/
# cp /usr/src/linux-2.4.32/drivers/scsi/BusLogic.o /lib/modules/2.4.32/kernel/drivers/scsi/ 不过别忘记,复制过后再执行一下make install。
这一步若卡住了,下面的都无法进行。
步骤三:重启虚拟机
1.完成步骤二后回到根目录/root,输入reboot重启虚拟机。
启动过程中会发现有两个可选择的Linux操作系统,第一个版本是原版本Linux2.4.20,以及刚才编译和安装的新版本Linux2.4.32。
(请截图)
2.选择新版本,进入新的操作系统后使用uname –a命令查看Linux当前内核信息,并截图。
注:以上实验步骤仅限于信息楼实验室环境,其它环境步骤可能有些地方需要稍微修改。
编译过程会比较漫长,需要耐心等会。