操作系统的第一次作业,通过虚拟机对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;
}