根据以下要求,写出三个相对应的可运行的c语言程序。实验三 简单文件系统设计 一、 实验目的 (1)加深对进程概念的理解,明确进程和程序的区别 (2)深入理解系统如何组织进程 (3)理解常用进程调度算法的具体实现 二、 实验内容 编写C程序模拟实现单处理机系统中的进程调度算法,实现对多个进程的调度模拟,要求采用常见进程调度算法(如先来先服务、时间片轮转和优先级调度等算法)进行模拟调度。

时间: 2024-03-14 22:48:39 浏览: 56

程序一:先来先服务调度算法

#include<stdio.h>
#include<stdlib.h>

#define MAX_PROCESS 10

struct Process {
    int pid; // 进程id
    int arrival_time; // 到达时间
    int burst_time; // 执行时间
    int waiting_time; // 等待时间
    int turnaround_time; // 周转时间
};

void FCFS(struct Process processes[], int n) {
    int time = 0;
    float avg_waiting_time = 0, avg_turnaround_time = 0;
    printf("\nFCFS Scheduling:\n");
    for(int i = 0; i < n; i++) {
        printf("\nProcess %d:\n", processes[i].pid);
        printf("Arrival Time: %d\n", processes[i].arrival_time);
        printf("Burst Time: %d\n", processes[i].burst_time);
        if(time < processes[i].arrival_time) {
            time = processes[i].arrival_time;
        }
        processes[i].waiting_time = time - processes[i].arrival_time;
        processes[i].turnaround_time = processes[i].waiting_time + processes[i].burst_time;
        time += processes[i].burst_time;
        printf("Waiting Time: %d\n", processes[i].waiting_time);
        printf("Turnaround Time: %d\n", processes[i].turnaround_time);
        avg_waiting_time += processes[i].waiting_time;
        avg_turnaround_time += processes[i].turnaround_time;
    }
    avg_waiting_time /= n;
    avg_turnaround_time /= n;
    printf("\nAverage Waiting Time: %f\n", avg_waiting_time);
    printf("Average Turnaround Time: %f\n", avg_turnaround_time);
}

int main() {
    struct Process processes[MAX_PROCESS];
    int n;
    printf("Enter number of processes (max %d): ", MAX_PROCESS);
    scanf("%d", &amp;n);
    printf("\nEnter process details:\n");
    for(int i = 0; i < n; i++) {
        printf("\nProcess %d:\n", i+1);
        processes[i].pid = i+1;
        printf("Arrival Time: ");
        scanf("%d", &amp;processes[i].arrival_time);
        printf("Burst Time: ");
        scanf("%d", &amp;processes[i].burst_time);
    }
    FCFS(processes, n);
    return 0;
}

程序二:时间片轮转调度算法

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

#define MAX_PROCESS 10
#define TIME_QUANTUM 2

struct Process {
    int pid; // 进程id
    int arrival_time; // 到达时间
    int burst_time; // 执行时间
    int remaining_burst_time; // 剩余执行时间
    int waiting_time; // 等待时间
    int turnaround_time; // 周转时间
};

void RR(struct Process processes[], int n) {
    int time = 0, completed_processes = 0, i = 0;
    float avg_waiting_time = 0, avg_turnaround_time = 0;
    printf("\nRound Robin Scheduling:\n");
    while(completed_processes < n) {
        if(processes[i].remaining_burst_time > 0) {
            if(processes[i].remaining_burst_time > TIME_QUANTUM) {
                time += TIME_QUANTUM;
                processes[i].remaining_burst_time -= TIME_QUANTUM;
            }
            else {
                time += processes[i].remaining_burst_time;
                processes[i].waiting_time = time - processes[i].arrival_time - processes[i].burst_time;
                processes[i].turnaround_time = time - processes[i].arrival_time;
                completed_processes++;
                processes[i].remaining_burst_time = 0;
                printf("\nProcess %d:\n", processes[i].pid);
                printf("Waiting Time: %d\n", processes[i].waiting_time);
                printf("Turnaround Time: %d\n", processes[i].turnaround_time);
                avg_waiting_time += processes[i].waiting_time;
                avg_turnaround_time += processes[i].turnaround_time;
            }
        }
        i = (i+1) % n;
    }
    avg_waiting_time /= n;
    avg_turnaround_time /= n;
    printf("\nAverage Waiting Time: %f\n", avg_waiting_time);
    printf("Average Turnaround Time: %f\n", avg_turnaround_time);
}

int main() {
    struct Process processes[MAX_PROCESS];
    int n;
    printf("Enter number of processes (max %d): ", MAX_PROCESS);
    scanf("%d", &amp;n);
    printf("\nEnter process details:\n");
    for(int i = 0; i < n; i++) {
        printf("\nProcess %d:\n", i+1);
        processes[i].pid = i+1;
        printf("Arrival Time: ");
        scanf("%d", &amp;processes[i].arrival_time);
        printf("Burst Time: ");
        scanf("%d", &amp;processes[i].burst_time);
        processes[i].remaining_burst_time = processes[i].burst_time;
    }
    RR(processes, n);
    return 0;
}

程序三:优先级调度算法

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

#define MAX_PROCESS 10

struct Process {
    int pid; // 进程id
    int arrival_time; // 到达时间
    int burst_time; // 执行时间
    int priority; // 优先级
    int waiting_time; // 等待时间
    int turnaround_time; // 周转时间
};

void PS(struct Process processes[], int n) {
    int time = 0, completed_processes = 0, i = 0;
    float avg_waiting_time = 0, avg_turnaround_time = 0;
    printf("\nPriority Scheduling:\n");
    while(completed_processes < n) {
        int min_priority = INT_MAX, min_priority_idx = -1;
        for(int j = 0; j < n; j++) {
            if(processes[j].arrival_time <= time &amp;&amp; processes[j].priority < min_priority &amp;&amp; processes[j].burst_time > 0) {
                min_priority = processes[j].priority;
                min_priority_idx = j;
            }
        }
        if(min_priority_idx == -1) {
            time++;
            continue;
        }
        processes[min_priority_idx].burst_time--;
        if(processes[min_priority_idx].burst_time == 0) {
            completed_processes++;
            processes[min_priority_idx].waiting_time = time - processes[min_priority_idx].arrival_time - processes[min_priority_idx].burst_time;
            processes[min_priority_idx].turnaround_time = time - processes[min_priority_idx].arrival_time;
            printf("\nProcess %d:\n", processes[min_priority_idx].pid);
            printf("Waiting Time: %d\n", processes[min_priority_idx].waiting_time);
            printf("Turnaround Time: %d\n", processes[min_priority_idx].turnaround_time);
            avg_waiting_time += processes[min_priority_idx].waiting_time;
            avg_turnaround_time += processes[min_priority_idx].turnaround_time;
        }
        time++;
    }
    avg_waiting_time /= n;
    avg_turnaround_time /= n;
    printf("\nAverage Waiting Time: %f\n", avg_waiting_time);
    printf("Average Turnaround Time: %f\n", avg_turnaround_time);
}

int main() {
    struct Process processes[MAX_PROCESS];
    int n;
    printf("Enter number of processes (max %d): ", MAX_PROCESS);
    scanf("%d", &amp;n);
    printf("\nEnter process details:\n");
    for(int i = 0; i < n; i++) {
        printf("\nProcess %d:\n", i+1);
        processes[i].pid = i+1;
        printf("Arrival Time: ");
        scanf("%d", &amp;processes[i].arrival_time);
        printf("Burst Time: ");
        scanf("%d", &amp;processes[i].burst_time);
        printf("Priority (higher value means higher priority): ");
        scanf("%d", &amp;processes[i].priority);
    }
    PS(processes, n);
    return 0;
}
向AI提问 loading 发送消息图标

相关推荐

大学生入口

最新推荐

recommend-type

C语言程序设计实现区号查询系统C语言程序设计实现

在本次的《C语言程序设计》课程设计中,学生被要求构建一个区号查询系统,该系统具备多种功能,如添加、删除、显示、查找和修改区号信息。以下是关于这个系统及其设计实现的详细说明。 1. **设计内容** - **结构体...
recommend-type

C语言五子棋实验报告.docx

【C语言五子棋实验报告】的实验报告主要围绕使用C语言和EGE图形库实现一个五子棋小游戏,这是华中科技大学一门课程设计的结课作业,旨在深化学生对C语言的理解,学习图形库的使用,以及初步接触游戏编程。...
recommend-type

C语言程序设计实现门禁控制系统

在C语言程序设计中实现门禁控制系统,需要掌握以下几个核心知识点: 1. **ID卡技术**:ID卡是一种非接触式智能卡,通过无线射频技术传输数据。在门禁系统中,ID卡被授权作为电子钥匙,卡片中的信息经过控制器验证后...
recommend-type

操作系统实验一熟悉实验环境——Linux

操作系统实验一的主要目标是熟悉Linux操作系统环境,包括安装配置、基本操作、文件系统管理以及文本编辑。这个实验将涵盖以下几个核心知识点: 1. **Linux操作系统安装与配置**:实验要求参与者掌握Linux操作系统的...
recommend-type

操作系统实验报告(进程管理)

实验主要包括三个部分:先来先服务(FCFS)、时间片轮转(RR)以及动态优先级调度算法。下面将详细讨论这些算法以及实验中的关键数据结构和函数。 一、进程调度算法 1. 先来先服务(FCFS)调度算法:这种算法按照...
recommend-type

全面解析DDS信号发生器:原理与设计教程

DDS信号发生器,即直接数字合成(Direct Digital Synthesis,简称DDS)信号发生器,是一种利用数字技术产生的信号源。与传统的模拟信号发生器相比,DDS信号发生器具有频率转换速度快、频率分辨率高、输出波形稳定等优势。DDS信号发生器广泛应用于雷达、通信、电子测量和测试设备等领域。 DDS信号发生器的工作原理基于相位累加器、正弦查找表、数字模拟转换器(DAC)和低通滤波器的设计。首先,由相位累加器产生一个线性相位增量序列,该序列的数值对应于输出波形的一个周期内的相位。通过一个正弦查找表(通常存储在只读存储器ROM中),将这些相位值转换为相应的波形幅度值。之后,通过DAC将数字信号转换为模拟信号。最后,低通滤波器将DAC的输出信号中的高频分量滤除,以得到平滑的模拟波形。 具体知识点如下: 1. 相位累加器:相位累加器是DDS的核心部件之一,负责在每个时钟周期接收一个频率控制字,将频率控制字累加到当前的相位值上,产生新的相位值。相位累加器的位数决定了输出波形的频率分辨率,位数越多,输出频率的精度越高,可产生的频率范围越广。 2. 正弦查找表(正弦波查找表):正弦查找表用于将相位累加器输出的相位值转换成对应的正弦波形的幅度值。正弦查找表是预先计算好的正弦波形样本值,通常存放在ROM中,当相位累加器输出一个相位值时,ROM根据该相位值输出相应的幅度值。 3. 数字模拟转换器(DAC):DAC的作用是将数字信号转换为模拟信号。在DDS中,DAC将正弦查找表输出的离散的数字幅度值转换为连续的模拟信号。 4. 低通滤波器:由于DAC的输出含有高频成分,因此需要通过一个低通滤波器来滤除这些不需要的高频分量,只允许基波信号通过,从而得到平滑的正弦波输出。 5. 频率控制字:在DDS中,频率控制字用于设定输出信号的频率。频率控制字的大小决定了相位累加器累加的速度,进而影响输出波形的频率。 6. DDS设计过程:设计DDS信号发生器时,需要确定信号发生器的技术指标,如输出频率范围、频率分辨率、相位噪声、杂散等,然后选择合适的电路器件和参数。设计过程通常包括相位累加器设计、正弦查找表生成、DAC选择、滤波器设计等关键步骤。 毕业设计的同学在使用这些资料时,可以学习到DDS信号发生器的设计方法和优化策略,掌握如何从理论知识到实际工程应用的转换。这些资料不仅有助于他们完成毕业设计项目,还能为将来从事电子工程工作打下坚实的基础。
recommend-type

【联想LenovoThinkServer TS80X新手必读】:企业级服务器快速入门指南(内含独家秘诀)

# 摘要 本文对联想Lenovo ThinkServer TS80X服务器进行了全面介绍,涵盖了硬件基础、系统配置、网络安全、维护扩展以及未来展望等关键领域。首先,概述了该服务器的主要硬件组件和物理架构,特别强调了联想ThinkServer TS80X的特色架构设计。接着,详细阐述了系统安装与配置过程中的关键步骤和优化策略,以及网络配置与安全管理的实践。本文还讨论了
recommend-type

ubuntu anaconda opencv

### 安装并配置 OpenCV 使用 Anaconda 的方法 在 Ubuntu 上通过 Anaconda 安装和配置 OpenCV 是一种高效且稳定的方式。以下是详细的说明: #### 方法一:通过 Conda 渠道安装 OpenCV 可以直接从 `conda-forge` 频道安装 OpenCV,这是最简单的方法之一。 运行以下命令来安装 OpenCV: ```bash conda install -c conda-forge opencv ``` 此命令会自动处理依赖关系并将 OpenCV 安装到当前激活的环境之中[^1]。 --- #### 方法二:手动编译安装 Open
recommend-type

掌握VC++图像处理:杨淑莹教材深度解析

根据提供的文件信息,本文将详细解读《VC++图像处理程序设计》这本书籍的相关知识点。 ### 标题知识点 《VC++图像处理程序设计》是一本专注于利用C++语言进行图像处理的教程书籍。该书的标题暗示了以下几个关键点: 1. **VC++**:这里的VC++指的是Microsoft Visual C++,是微软公司推出的一个集成开发环境(IDE),它包括了一个强大的编译器、调试工具和其他工具,用于Windows平台的C++开发。VC++在程序设计领域具有重要地位,尤其是在桌面应用程序开发和系统编程中。 2. **图像处理程序设计**:图像处理是一门处理图像数据,以改善其质量或提取有用信息的技术学科。本书的主要内容将围绕图像处理算法、图像分析、图像增强、特征提取等方面展开。 3. **作者**:杨淑莹,作为本书的作者,她将根据自己在图像处理领域的研究和教学经验,为读者提供专业的指导和实践案例。 ### 描述知识点 描述中提到的几点关键信息包括: 1. **教材的稀缺性**:本书是一本较为罕见的、专注于C++语言进行图像处理的教材。在当前的教材市场中,许多图像处理教程可能更倾向于使用MATLAB语言,因为MATLAB在该领域具有较易上手的特点,尤其对于没有编程基础的初学者来说,MATLAB提供的丰富函数和工具箱使得学习图像处理更加直观和简单。 2. **C++语言的优势**:C++是一种高性能的编程语言,支持面向对象编程、泛型编程等高级编程范式,非常适合开发复杂的软件系统。在图像处理领域,C++可以实现高效的算法实现,尤其是在需要处理大量数据和优化算法性能的场合。 3. **针对初学者和有一定编程基础的人士**:这本书虽然使用了相对复杂的C++语言,但仍然适合编程初学者,尤其是那些已经具备一定编程基础的读者,如理工科院校的学生、图像处理的爱好者和工程师。 ### 标签知识点 标签与标题相呼应,指出了书籍的特色和研究领域: 1. **VC++**:标签强化了该书使用VC++这一工具进行开发的特点。 2. **图像处理程序设计**:标签强调了本书内容的重点在于图像处理程序的设计与实现。 3. **杨淑莹**:作为标签的一部分,作者的名字体现了本书的专业性和作者的学术地位。 ### 压缩包子文件的文件名称列表 1. **VC++图像处理程序设计(杨淑莹).pdf**:这个文件名称告诉我们,下载的文件是PDF格式的,且文件内容与《VC++图像处理程序设计》这本书籍相关,作者是杨淑莹。 总结以上知识点,这本书籍对于熟悉C++语言并希望深入学习图像处理技术的读者来说,是一个宝贵的资源。书中可能会详细地介绍如何使用C++语言结合VC++的开发环境进行各种图像处理任务,包括但不限于:图像的读取与显示、颜色转换、图像滤波、边缘检测、图像分割、形态学处理、特征提取以及图像识别等方面。此外,鉴于图像处理领域涉及到大量的数学知识,如线性代数、概率论和数值分析等,本书可能还会包含这些基础理论知识的介绍,以帮助读者更好地理解和实现图像处理算法。
recommend-type

【ant.jar应用详解】:Java中高效解压ZIP文件的策略

# 摘要 本文详细介绍了ant.jar在ZIP文件解压中的应用,从基本API概述到性能优化,再扩展到与Java NIO的结合使用。通过分析ant.jar的主要组件和解压相关的类,本文演示了如何利用ant.jar执行基本和高级解压操作,并对异常情况进行处理。接着,文章探讨了如何将ant.jar与Java NIO技术相结合来提升解压效率,并展示了异步解压
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部