操作系统的第一次作业,通过虚拟机对Windows、Linux、MacOS三种操作系统进行分析。下面我直入主题(出这篇的目的大概是想开源造福大家吧):

更多人关心的是报告怎么写,我先给出我的报告的目录截图,本文后面可以直接下载我的报告

https://download.csdn.net/download/qq_39861376/11830902

首先第一题,我下载了VMware和三个系统得镜像,在我的U盘里都有备份,有需要的同学可以直接找我拷贝,由于太大,这里下载链接就不给了。下边是我报告中的三个系统部分运行截图。

第二题到第四题中,我给出了多线程模拟多道程序在多核和单核的运行情况,代码我将放在本文的后面,比较简单。

下面是我的部分分析的截图:


同时我也给出了详细的分析过程

在第四大题中,我详细的给出了批处理以及CUI,GUI的步骤和每一步的结果,可以直接复制查看结果

剩下的第六第七题我同样详细的给出了解释

 

软件的同学可以直接下载对我的文档进行修改,改进,并上交作业

c++多线程程序1(存在互斥)(第一个是单线程程序,第二个是对应的多线程)

// operator_system.cpp: 定义控制台应用程序的入口点。
//多线程生产者消费者模拟互斥同步的情况
#include<iostream>
#include<queue>
#include <windows.h>
#include<ctime>
using namespace std;

static const int item_total = 100; //总共要生产 item_total个item
																	//false
struct Buffer
{
	queue<int> buffer;
	int in;
	int out;
}buffer_res;

typedef struct Buffer Buffer;

void porduce_item(Buffer *b, int item)
{
	
	b->buffer.push(item);
	b->in++;

	//模拟不互斥的情况
	Sleep(200);
}

void consume_item(Buffer *b)
{
	if (b->buffer.size() > 0)
	{
		int temp = b->buffer.front();
		
		b->out++;
		b->buffer.pop();

		//模拟不互斥的情况
		cout << "out:" << temp << endl;
		Sleep(100);
	}
}

//生产者任务
void producer() {
	for (int i = 1; i <= item_total; i++) {
		porduce_item(&buffer_res, i);
	}
}

//消费者任务
void consumer()
{
	for (int i = 1; i <= item_total; i++) {
		consume_item(&buffer_res);
	}
	while (1) {
		consume_item(&buffer_res);
		if (buffer_res.out == 100)
			break;
	}
}

//初始化 buffer
void init_buffer(Buffer *b)
{
	b->in = 0;
	b->out = 0;
}

int main()
{
	clock_t startTime, endTime;
	startTime = clock();//计时开始

	init_buffer(&buffer_res);

	producer();
	consumer();

	endTime = clock();//计时结束
	cout << "The run time is: " << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
	getchar();
}
// operator_system.cpp: 定义控制台应用程序的入口点。
//
#include<iostream>
#include <mutex>
#include<queue>
#include <condition_variable>
#include <windows.h>
#include <thread>
#include<ctime>
using namespace std;

static const int item_total = 100; //总共要生产 item_total个item
																	//false
struct Buffer
{
	queue<int> buffer;
	int in;
	int out;
	mutex m;
}buffer_res;

typedef struct Buffer Buffer;

void porduce_item(Buffer *b, int item)
{
	unique_lock<mutex> lock(b->m);
	//Sleep(2);
	b->buffer.push(item);
	//cout << "b->buffer.size():" << b->buffer.size() << endl;
	lock.unlock();

	b->in++;
	//模拟不互斥的情况
	Sleep(200);
}

void consume_item(Buffer *b)
{
	if (b->buffer.size()>0)
	{
		unique_lock<mutex> lock(b->m);
		int temp = b->buffer.front();
		
		b->out++;
		b->buffer.pop();
		lock.unlock();

		//模拟不互斥的情况
		cout << "out:" << temp << endl;
		Sleep(100);
	}
}

//生产者任务
void producer() {
	for (int i = 1; i <= item_total; i++) {
		porduce_item(&buffer_res, i);
	}
}

//消费者任务
void consumer()
{
	for (int i = 1; i <= item_total; i++) {
		consume_item(&buffer_res);
	}
	while (1) {
		consume_item(&buffer_res);
		if (buffer_res.out==100)
			break;
	}
}

//初始化 buffer
void init_buffer(Buffer *b)
{
	b->in = 0;
	b->out = 0;
}

int main()
{
	clock_t startTime, endTime;
	startTime = clock();//计时开始

	init_buffer(&buffer_res);
	thread prodece(producer);
	thread consume(consumer);
	prodece.join();
	consume.join();

	endTime = clock();//计时结束
	cout << "The run time is: " << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
	getchar();
}

c++多线程程序2(无互斥)

//无互斥的多线程程序(较为简单)
#include<iostream>
#include<thread>
#include<ctime>
using namespace std;
void f1()
{
	for (int i = 0; i < 50000; i++)
	{
		cout << "f1" << endl;
	}
}
void f2()
{
	for (int i = 0; i < 50000; i++)
	{
		cout << "f2" << endl;
	}
}
int main()
{
	clock_t startTime, endTime;
	startTime = clock();//计时开始
	thread f1(f1);
	thread f2(f2);
	f1.join();
	f2.join();
	endTime = clock();//计时结束
	cout << "The run time is: " << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
	getchar();
	return 0;
}