操作系统实验二(3)实验报告

操作系统实验二(3)实验报告
操作系统实验二(3)实验报告

烟台大学计算机学院

操作系统

实验报告书

班级:计114-3班

姓名:刘镇

学号:201158504337

日期:2013-6-7

2019-6-13 第2页/共6页

2019-6-13 第3页/共6页

2019-6-13 第5页/共6页

2019-6-13 第6页/共6页

操作系统实验报告一

重庆大学 学生实验报告 实验课程名称操作系统原理 开课实验室DS1501 学院软件学院年级2013专业班软件工程2 班学生姓名胡其友学号20131802 开课时间2015至2016学年第一学期 总成绩 教师签名洪明坚 软件学院制

《操作系统原理》实验报告 开课实验室:年月日学院软件学院年级、专业、班2013级软件工 程2班 姓名胡其友成绩 课程名称操作系统原理 实验项目 名称 指导教师洪明坚 教师 评语教师签名:洪明坚年月日 1.实验目的: ?进入实验环境 –双击expenv/setvars.bat ?检出(checkout)EPOS的源代码 –svn checkout https://www.360docs.net/doc/e212469477.html,/svn/epos ?编译及运行 –cd epos/app –make run ?清除所有的临时文件 –make clean ?调试 –make debug ?在“Bochs Enhanced Debugger”中,输入“quit”退出调试 –调试指令,请看附录A 2.实验内容: ?编写系统调用“time_t time(time_t *loc)” –功能描述 ?返回从格林尼治时间1970年1月1日午夜起所经过的秒数。如果指针loc 非NULL,则返回值也被填到loc所指向的内存位置 –数据类型time_t其实就是long ?typedef long time_t; 3.实验步骤: ?Kernel space –K1、在machdep.c中,编写系统调用的实现函数“time_t sys_time()”,计算用户秒数。需要用到 ?变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年1午夜的秒数 ?变量g_timer_ticks

操作系统实验报告-实验二

操作系统实验报告——实验二:C编程环境 实验目的 1.熟悉Linux下C程序设计的环境; 2.对系统调用有初步了解。 实验内容 1.Linux下C语言程序的开发过程 a、在用户主目录下用vi编辑C语言源程序(源程序已附后),如:$vi hello.c。 b、用gcc编译C语言源程序:$gcc ./hello.c -o example 这里gcc是Linux下的C语言程序编译器(GNU C Compiler),./hello.c表示待编译的源文件是当前工作目录下的hello.c,-o example表示编译后产生的目标代码文件名为example。 c、若编译不正确,则进入vi修改源程序,否则,运行目标代码:$./example 。注意: 这只是gcc最基本的用法,其他常用选项有:-c , -S , -O , -O2, -g 等。 2.编辑、调试下面c语言程序,说明该程序的功能。 #include #include int main() { int n,a[200],carry,temp,i,j,digit = 1; printf("Please input n:"); scanf("%d",&n); a[0] = 1; for( i = 2; i <= n; ++i) { for( j = 1, carry = 0; j <= digit; ++j) { temp = a[j-1] * i + carry; a[j-1] = temp % 10; carry = temp / 10; } while(carry) { a[++digit-1] = carry % 10; carry /= 10; } } printf("Result is:\n%d ! = ",n); for( i = digit; i >=1; --i) { printf("%d",a[i-1]); }

操作系统实验报告三

课程实验报告 课程名称姓名实验名称实验目的及要求 实验3进程并发与同步 1、加深对进程概念的理解,区分进程并发执行与串行执行; 2、掌握进程并发执行的原理,理解进程并发执行的特点; 3、了解fork()系统调用的返回值,掌握用fork()创建进程的方法;熟悉wait、exit等系统调用; 4、能利用相应的系统调用实现进程树与进程间的同 步。 实 验操作系统:linux Un bu ntu 11.10 环 境实验工具:Vmware 实验内容 1、编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father ”,儿子进 程执行时屏幕显示“ I am son ",女儿进程执行时屏幕显示“ I am daughter ”。 要求多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。要求有运行结果截图与结果分析 2、连续4个fork()的进程家族树,family1-1.c 程序清单如下: #in clude main () { fork(); fork(); fork(); fork(); printf( A\n ”); } 请根据程序运行结果,画出进程家族树,并分析原 因。

3、 修改程序1,在父、子进程中分别使用 wait 、exit 等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束, 才可以输出消息。 写出相应的同 步控制,并分析运行结果。 4、 创建一个子进程,并给它加载程序,其功能是调用键盘命令“ ls -I ”,已知 该键盘命令的路径与文件名为: /bin/ls 。父进程创建子进程, 并加载./child2 程序。 写出相应的程序代码并分析程序运行结果。 1、编写一 C 语言程序,实现在程序运行时通过系统调用 fork()创建两个子进 程,使父、子三进程并发执行,父亲进程执行时屏幕显示“ I am father ”, 儿子进程执行时屏幕显示“ I am son ”,女儿进程执行时屏幕显示“ I am daughter "。并且反复的测试,观察每一次的执行的顺序有什么不同 2、修改程序1,在父、子进程中分别使用 wait 、exit 等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ ls -I ”,已知 该键盘命令的路径与文件名为: /bin/ls 。父进程创建子进程, 并加载./child2 程序。 法 描 述 及 实 验 步 骤 调 试过 程及实 验结果

操作系统lab2实验报告

HUNAN UNIVERSITY 操作系统实验报告

目录 一、内容 (3) 二、目的 (3) 三、实验设计思想和练习题 (3) 练习0:填写已有实验 (3) 练习1:实现 first-fit 连续物理内存分配算法(需要编程) (3) 练习2:实现寻找虚拟地址对应的页表项(需要编程) (8) 练习3:释放某虚地址所在的页并取消对应二级页表项的映射(需要编程) (11) 运行结果 (13) 四、实验体会 (13)

一、内容 本次实验包含三个部分。首先了解如何发现系统中的物理内存;然后了解如何建立对物理内存的初步管理,即了解连续物理内存管理;最后了解页表相关的操作,即如何建立页表来实现虚拟内存到物理内存之间的映射,对段页式内存管理机制有一个比较全面的了解。 二、目的 1.理解基于段页式内存地址的转换机制; 2.理解页表的建立和使用方法; 3.理解物理内存的管理方法。 三、实验设计思想和练习题 练习0:填写已有实验 使用eclipse中的diff/merge工具将实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。 练习1:实现 first-fit 连续物理内存分配算法(需要编程) 在实现first fit 内存分配算法的回收函数时,要考虑地址连续的空闲块之间的合并操作。提示:在建立空闲页块链表时,需要按照空闲页块起始地址来排序,形成一个有序的链表。可能会修改default_pmm.c 中的default_init,default_init_memmap,default_alloc_pages, default_free_pages等相关函数。请仔细查看和理解default_pmm.c中的注释。 请在实验报告中简要说明你的设计实现过程。请回答如下问题: 你的first fit算法是否有进一步的改进空间。 解答: 分析思路: (1)数据结构: A.每个物理页利用一个Page结构体表示,查看kern/mm/memlayout.h包括:

操作系统实验报告三

课程实验报告

3、修改程序1,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。写出相应的同步控制,并分析运行结果。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ls -l”,已知该键盘命令的路径与文件名为:/bin/ls。父进程创建子进程,并加载./child2程序。写出相应的程序代码并分析程序运行结果。 算法描述及实验步骤 1、编写一C语言程序,实现在程序运行时通过系统调用fork( )创建两个子进 程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”, 儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。并且反复的测试,观察每一次的执行的顺序有什么不同 2、修改程序1,在父、子进程中分别使用wait、exit等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ls -l”,已知该键盘命令的路径与文件名为:/bin/ls。父进程创建子进程,并加载./child2程序。 调试过程及实验结果

总结 1、实现在程序运行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。这一点需要注意。返回结果时,由于每一次的不确定性,所以要想得到比较具有说服性的,就必须经过多次的测试。 2、连续4个fork()的进程家族树在进行实验的时候可能会出现进程输出信息一直一样的情况,需要多次执行输出才有可能会看到输出结果不一样的情况

上海大学操作系统(二)实验报告(全)

评分: SHANGHAI UNIVERSITY 操作系统实验报告 学院计算机工程与科学 专业计算机科学与技术 学号 学生姓名

《计算机操作系统》实验一报告 实验一题目:操作系统的进程调度 姓名:张佳慧学号 :12122544 实验日期: 2015.1 实验环境: Microsoft Visual Studio 实验目的: 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。实验内容: 1、设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 2、调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。 3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。 操作过程: 1、本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。进程控制块结构如下: 进程控制块结构如下: PCB 进程标识数 链指针 优先数/轮转时间片数 占用 CPU 时间片数 进程所需时间片数 进程状态 进程控制块链结构如下:

其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。2、算法与框图 (1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加 1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。 (3) 程序框图

操作系统实验报告 实验三

昆明理工大学信息工程与自动化学院学生实验报告 (2012 —2013 学年第二学期) 课程名称:操作系统开课实验室:信自楼445 2013 年 5 月 16 日 一、实验要求 对给定的一个页面走向序列,请分别用先进先出算法和二次机会算法,计算淘汰页面的顺序、缺页次数和缺页率,具体的页面走向可参考教材例题或习题。 二、实验目的 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。通过本次实验,要求学生通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解,通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 三、实验原理及基本技术路线图(方框原理图) 用C或C++语言模拟实现请求式分页管理。要求实现:页表的数据结构、分页式内存空间的分配及回收(建议采用位图法)、地址重定位、页面置换算法(从FIFO,LRU,NRU中任选一种)。 提示:可先用动态申请的方式申请一大块空间,然后假设该空间为内存区域,对该空间进行

流程图:

数据结构定义: 我提供定义了两个类。第一个类就是页面类,在这类里面包括一些重要的数据成员。

有页号(page_no),页框号(frame_no),页面是否在内存的标志(flag(1表示在内存,0表示不在内存)),访问次数(times)。另一个类是进程控制块类PCB。类的数据成员有id(进程编号),name(进程名),size(进程大小),*p(页类指针)。在本类中,有一些成员函数:构造函数(用来初始化本类的所有数据),displayPCB(输出函数),convert(地址映射函数),allocation(分配函数),restore(回收函数)。另外还有一些类外的函数:initMemorySpace(初始化内存空间的函数),displayMemorySpace(输出内存空间的状态1(表示占用)0(表示空))。 四、所用仪器、材料(设备名称、型号、规格等)。 计算机一台 五、实验方法、步骤 程序代码: #include #include #include using namespace std; const int frame_size=1024;//页框长度,固定为 1k const int page_size=1024;//页面长度,固定为 1k const int memory_size=102400;//内存容量,固定为 100k const int frame_number=memory_size/frame_size;// 100k/1k=100 frames int *memory;//指针变量,用来存内存的状态1还是0。 void initMemorySpace()//初始化内存空间 { int i,ran,times; time_t t;//定义time_t对象 t t=time(0); srand(t);//随机改变每秒 times=0;//变量times初始化为0,变量的功能是检查内存空间是否有一半空了没。 memory=new int[frame_number];//申请内存空间,有frame_number 这么大的空间 for(i=0;i

操作系统实验报告

操作系统教程 实 验 指 导 书 姓名: 学号: 班级:软124班 指导老师:郭玉华 2014年12月10日

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序: E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : 有可能是因为DOS下路径的问题 (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 因为程序是个死循环程序 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环: 屏蔽j循环: _______________________________________________________________________________调整循环变量i的循环次数:

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014年 1 月 1 日

实验一线程的状态和转换(5分) 1 实验目的和要求 目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。 要求: (1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码; (2)修改EOS的源代码,为线程增加挂起状态。 2 完成的实验内容 2.1 EOS线程状态转换过程的跟踪与源代码分析 (分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) 1.EOS 准备了一个控制台命令“loop ”,这个命令的命令函数是 ke/sysproc.c 文件中的ConsoleCmdLoop 函数(第797行,在此函数中使用 LoopThreadFunction 函数(第755 行)创建了一个优先级为 8 的线程(后面简称为“loop 线程”),该线程会在控制台中不停的(死循环)输出该线程的ID和执行计数,执行计数会不停的增长以表示该线程在不停的运行。loop命令执行的效果可以参见下图: 2. 线程由阻塞状态进入就绪状态 (1)在虚拟机窗口中按下一次空格键。 (2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。 (3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。 (4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。 (5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对

Windows操作系统实验三实验报告

Windows操作系统C/C++ 程序实验 姓名:___________________ 学号:___________________ 班级:___________________ 院系:___________________ ______________年_____月_____日

实验三Windows 2000/xp线程同步 一、背景知识 二、实验目的 在本实验中,通过对事件和互斥体对象的了解,来加深对Windows 2000/xp线程同步的理解。 1) 回顾系统进程、线程的有关概念,加深对Windows 2000/xp线程的理解。 2) 了解事件和互斥体对象。 3) 通过分析实验程序,了解管理事件对象的API。 4) 了解在进程中如何使用事件对象。 5) 了解在进程中如何使用互斥体对象。 6) 了解父进程创建子进程的程序设计方法。 三、工具/准备工作 在开始本实验之前,请回顾教科书的相关内容。 您需要做以下准备: 1) 一台运行Windows 2000/xp Professional操作系统的计算机。 2) 计算机中需安装V isual C++ 6.0专业版或企业版。 四、实验内容与步骤 1. 事件对象 清单4-1程序展示了如何在进程间使用事件。父进程启动时,利用CreateEvent() API创建一个命名的、可共享的事件和子进程,然后等待子进程向事件发出信号并终止父进程。在创建时,子进程通过OpenEvent() API打开事件对象,调用SetEvent() API使其转化为已接受信号状态。两个进程在发出信号之后几乎立即终止。 步骤1:登录进入Windows 2000/xp Professional。 步骤2:在“开始”菜单中单击“程序”-“Microsoft V isual Studio 6.0”–“Microsoft V isual C++ 6.0”命令,进入V isual C++窗口。 步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序3-1.cpp。 步骤4:单击“Build”菜单中的“Compile 3-1.cpp”命令,并单击“是”按钮确认。系统

操作系统实验报告

操作系统教程实验报告 专业班级 学号 姓名 指导教师

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环:

操作系统实验报告.

学生学号0121210680225 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称操作系统 开课学院计算机科学与技术学院 指导老师姓名刘军 学生姓名李安福 学生专业班级软件sy1201 2014 — 2015 学年第一学期

《操作系统》实验教学大纲 课程编号: 课程名称:操作系统/Operating System 实验总学时数:12学时 适应专业:计算机科学与技术、软件工程 承担实验室:计算机科学与技术学院实验中心 一、实验教学的目的和任务 通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。 二、实验项目及学时分配 序号实验项目名称实验学时实验类型开出要求 01 Linux键盘命令和vi 2 设计必开 02 Linux下C编程 2 设计必开 03 SHELL编程和后台批处理 2 设计必开 04 Linux系统调用(time) 2 设计必开 05 Linux进程控制(fork) 4 设计必开 三、每项实验的内容和要求: 1、Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 内容:见教材p4, p9, p40, p49-53, p89, p100 2、Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 3、SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容:(1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键 盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容, 然后输出到屏幕。 4、Linux系统调用使用方法。

操作系统原理实验报告(终版)

操作系统原理实验报告(终版)

————————————————————————————————作者:————————————————————————————————日期:

[键入文字] XX学校 实验报告 课程名称: 学院: 专业班: 姓名: 学号: 指导教师: 2011 年3 月

目录 实验1 进程管理 (3) 一、实验目的 (3) 二、实验内容 (3) 三、实验要求 (3) 四、程序说明和程序流程图 (4) 五、程序代码 (5) 六、程序运行结果及分析 (7) 七.指导教师评议 (8) 实验2 进程通信 (9) 一、实验目的 (9) 二、实验内容 (9) 三、实验要求 (9) 四、程序说明和程序流程图 (9) 五、程序代码 (11) 七.指导教师评议 (14) 实验3 存储管理 (15) 一、实验目的 (15) 二、实验内容 (15) 三、实验要求 (15) 四、程序说明和程序流程图 (16) 六、程序运行结果及分析 (23)

七.指导教师评议 (23) 实验4 文件系统 (24) 一、实验目的 (24) 二、实验内容 (24) 三、实验要求 (24) 四、程序说明和程序流程图 (24) 五、程序代码 (26) 六、程序运行结果及分析 (26) 七.指导教师评议 (27)

实验1 进程管理 一、实验目的 1. 弄清进程和程序的区别,加深对进程概念的理解。 2. 了解并发进程的执行过程,进一步认识并发执行的实质。 3. 掌握解决进程互斥使用资源的方法。 二、实验内容 1. 管道通信 使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上。 2. 软中断通信 使用系统调用fork( )创建2个子进程p1和p2,在父进程中使用系统调用signal( )捕捉来自键盘上的软中断信号SIGINT(即按Ctrl-C),当捕捉到软中断信号SIGINT后,父进程使用系统调用kill( )分别向2个子进程发出软中断信号SIGUSR1和SIGUSR2,子进程捕捉到信号后分别输出信息“Child process p1 is killed by parent!”和“Child process p2 is killed by parent!”后终止。而父进程等待2个子进程终止后,输出信息“Parent process is killed!”后终止。 三、实验要求 1. 根据实验内容编写C程序。 2. 上机调试程序。 3. 记录并分析程序运行结果。

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

操作系统实验报告1

操作系统 实验报告 班号:1303107 学号:1130310726 姓名:蔡鹏

1.请简述head.s 的工作原理。 head.s实在32位保护模式下运行的。我认为这段程序主要包括两个部分:1.初始化设置。2.任务执行与切换。 初始设置主要包括了:1.设置GDT表2.设置系统定时芯片3. 设置IDT表(0x08时钟中断和0x80系统调用中断)4.切换到任务0执行 任务切换和执行包括了:1.任务0和任务1 , 2.时钟中断, 3.系统中断 两个任务的在LDT中代码段和数据段描述符的内容都设置为:基地址0x0000;段限长值为0x03ff,实际段长度为4MB。因此在线性地址空间中这个?内核?的代码和数据段与任务的代码和数据段都从线性地址0开始并且由于没有采用分页机制,所以他们都直接对应物理地址0开始处。 为了每隔10毫秒切换运行的任务,head.s程序中把定时器芯片8253的通道0设置成每隔10毫秒就向中断控制芯片8259A发送一个时钟中断请求信号。PC机的ROM BIOS开机时已经在8259A中把时钟中断请求信号设置成中断向量8,因此我们需要在中断8的处理过程中执行任务切换操作。任务切换的实现是查看current变量中的当前运行的任务号,如果为0,就利用任务1的TSS选择符作为操作数执行远跳转指令,从而切换到任务1中,否则反之。

每个任务在执行时,会首先把一个字符的ASCII码放入寄存器AL中,然后调用系统中断调用int 0x80,而该系统调用处理过程则会调用一个简单的字符写屏子程序,把寄存器AL中的字符显示在屏幕上,同时把字符显示的屏幕的下一个位置记录下来,作为下一次显示字符用。在显示过一个字符后,任务代码会使用循环语句延迟一段时间,然后又跳转到任务代码开始处继续循环执行,直到运行了10毫秒而发生了定时中断,从而代码会切换到另一个任务执行。对于任务A,寄存器AL中始终存放字符‘A’,而任务B运行时AL中始终存放字符‘B’。因此程序运行时我们将看到一连串的‘A’和一连串的‘B’间隔的连续不断的显示在屏幕上。若出现了一个‘C’,是由于PC机偶然产生了一个不是时钟中断和系统调用中断的其他中断。因为我们已经在程序中给所有其他中断安装了一个默认中断处理程序。当出现一个其他中断时,系统就会运行这个中断处理程序,于是就会在屏幕上显示一个‘C’,然后退出中断。 4.请记录head.s 的内存分布状况,写明每个数据段,代码段,栈段 的起始与终止的内存地址。

操作系统实验报告16487

西安邮电大学 (计算机学院) 课实验报告 实验名称:进程管理 专业名称:计算机科学与技术 班级: 学生: 学号(8位): 指导教师: 实验日期:*****年**月**日

一. 实验目的及实验环境 目的:(1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)分析进程竞争资源现象,学习解决进程互斥的方法。 (4)了解Linux系统中进程通信的基本原理。 环境:Linux操作系统环境: 二. 实验容 (1)阅读Linux的sched.h源文件,加深对进程管理概念的理解。 (2)阅读Linux的fork.c源文件,分析进程的创建过程。 三.方案设计 (1)进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。(2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 (3)①编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is Killed! 程序流程图如下:

操作系统实验一实验报告

操作系统实验一实验报告 基本信息 1.1 实验题目 进程控制实验 1.2完成人 王召德 1.3报告日期 2015-4-8 实验内容简要描述 2.1实验目标 加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和 体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过 程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux 系统中 进程创建与控制有关的系统调用的编程和调试技术。 2.2实验要求 参考以上示例程序中建立并发进程的方法,编写一个多进程并发执行程序。父进程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制ps 命令总在ls 命令之前执行。 2.3实验的软硬件环境

Ubuntu14.04 intelPC 报告的主要内容 3.1实验的思路 按照上面的实例,先生成一个子进程让其等待,然后生成第二个子进程,父进程等待其执行ps命令后唤醒第一个子进程执行ls即可。 3.2实验模型的描述 无 3.3主要数据结构的分析说明 无 3.4主要算法代码的分析说明 无 3.5项目管理文件的说明 无 实验过程和结果 4.1实验投入的实际学时数 1学时 4.2调试排错过程的记录 曾尝试让第二个子进程激活第一个子进程,结果发现当运行ps后,后面的代码将不再执行,所以不可行。 4.3多种方式测试结果的记录

实验结果: 父进程启动 (12239) ls子进程启动 (12240) ps子进程启动 (12241) PID TTY TIME CMD 12239 pts/27 00:00:00 born 12240 pts/27 00:00:00 born 12241 pts/27 00:00:00 ps ps子进程结束 (12241) 唤醒ls子进程 (12240) 键盘中断信号产生... ls子进程被唤醒 (12240) . born born.c~ hello.c pctl pctl.c~ pctl.o .. born.c helelo.h~ hello.c~ pctl.c pctl.h ls子进程结束 (12240) 父进程结束 (12239) 4.4实验结果的分析综合 无 实验的总结 父进程可以通过fork()函数生成子进程,子进程会从fork()函数开始执行原来的代码,当

电大 操作系统实验报告2

中央广播电视大学计算机科学与技术专业 操作系统(本科) 实验报告 院系:____计算机科学与技术____ 班级:___10春计(本)________ 学生姓名:_____ _____________ 学号:___________ 指导教师:______陈访荣____________ 完成日期 2011 年 12月 01日

一、实验题目: Linux 使用及Shell编程 二、实验目的和要求: 学会Linux系统的基本操作和常用命令,对Shell编程有初步了解。 三、实验内容: 1.正确地登录和退出Linux系统。 2.熟悉使用Linux常用命令。 3.使用vi建立、编辑文件。 4.建立Shell脚本程序并执行。 四、实验技术和方法: (说明:对本实验涉及的教材中的相关内容进行归纳总结,只需简要说明即可。)Linux系统登录和退出,Linux常用命令,Vi基本操作,Shell编程。

五、实验环境: (说明:列出本实验使用到的软件平台和工具,如Linux系统版本,shell类型,vi编辑工具等。) Linux系统、Putty软件、vi文本编辑工具、shell 六、实验步骤和结果: (说明:详细给出实验步骤和结果。实验步骤不一定与《实验指南》中的完全一致。对实验结果,除文字说明外,对一些关键结果,需要给出一些界面截图。) 1登录和退出Linux系统 (1).从Linux计算机登录Linux系统 不论是GUI方式或命令行方式的Linux,在登录系统时,用户都需要输入注册名和密码,密码验证正确后,用户登录成功。 (2).从Windows计算机登录Linux系统 用户不必为每台计算机都安装Linux系统,如果一台已经安装了Linux的计算机与其他的Windows计算机同在一个局域网内,并且Linux系统已经启动,那么这些Windows计算机上的用户就可以通过一个名为Putty的软件(可以从网上下载)登录到Linux系统。

相关文档
最新文档