燕山大學軟件工程操作系統MYW第一次作業

操作系統的第一次作業,通過虛擬機對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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章