操作系统实验报告 - 图文 下载本文

操作系统课程实验

实 验 报 告

操作系统课程组 编

实验内容: 实验1、实验2

姓名: 张梦圆 仇冠伦学号: 2016112127

2016112130

班级: 电子 2016-04 班成绩:

西南交通大学电气工程学院

报告格式要求

1 . .2 .3 .4

只需回答每个实验中“实验结果”,需抄写问题。

正文和标题皆使用小四号宋体字,标题需加粗。参见示例 1。

在回答问题涉及截图时,建议调整截图大小,使其适合阅读并节约版面。 在回答程序相关的问题时,建议灵活应用文本框和注解图形,以充分说明。参见示例 2。

除了程序正确,正确规范的语言表达也是实验要求重点。因此在实验中注意.5

训练文本表达,准确表述自己的工作重心和亮点。 示例 1:

实验 1-1. 基础练习

实验 1-1a. 创建命令行应用程序(Win32 Console Application)

1. 请说明使用的 Visual C++版本。

答: ……

2. 请对程序执行结果截图。

答: ……

3. 请在 Windows 文件资源管理器中找到该项目目录,请截图说明;并从中找到 main.cpp 文件、main.obj 和学号-1-1a.exe,亦请截图说明。 答: ……

示例 2: int main() { cout << “Hello world.” << endl; return 0; }

在命令行窗口输出字符串”Hello world”。 并退出 main 函数。 实验 1-1. 线程(Threads) 实验 1-1a. HelloWorld 程序

1. 请给出程序运行结果的截图。 答:

2. 请结合程序,分析线程 t1 何时被创建、运行和结束。 答:

int main() {

//Launch a thread

std::thread t1(call_from_thread); 创建线程 //Join the thread with the main thread

t1.join(); 等待子线程执行完毕之后再继续向下执行主线程 return 0; 线程结束 }

实验 1-1b. 多线程并发执行

1. 请给出程序运行结果的截图。 答:

2. 请分析程序输出结果是否固定。

答:主函数也是一条线程,通常叫做主线程,所以上面的代码实际上有 11 条线程在运行。程序创建线程组,其线程的运行存在先后秩序不确定的现象。

实验 1-1c. 线程中函数的参数 1. 请给出程序运行结果的截图。 答:

2. 请分析程序输出内容的格式不整齐的原因。 答:有 i+1 个线程在竞争运行,程序内的 11 条线程都在竞争性地使用 stdout 这个公共资源,所以输出结果不整齐。

实验 1-2. 线竞争状态(Race conditions) 1. 请给出程序运行结果的截图。 答:

2. 请结合程序,解释程序中线程为何出现竞争状态。

答:由于本例中使用多个线程模拟多个用户对广告的点击,存在多个线程同时访问同一个类(对象或方法),而在这种情况下,多个线程都能同时获取以及改变共享数据,竞争危害便发生了。因为各个线程对数据操纵的顺序并不可预知,因此数据改变的结果取决于线程最终的运行顺序。所有的线程都在 “Racing”(竞争)以优先获取数据改变数据。

实验 1-3. 互斥锁

实验 1-3a. 互斥锁(Mutex) 1 请给出程序运行结果的 .5 个截图。 答: