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