西南交通大学【操作系统实验1】

实验目的

  1. 通过本实验了解Linux系统的组织和行为,观察各种存储系统状态信息的内核变量
  2. 熟悉这些结构和信息

实验内容

  1. 理解Linux操作系统以及./proc文件
  2. 熟悉codeblocks,学习Linux下c程序调试技术
  3. 根据给定的程序观察cpuinfo/version/stat/uptime
  4. 编程实现对meminfo/loadavg/interrupts/filesystems的观测

实验环境

Ubuntu 12.04 LTS

Device name: oslinux-virtual-machine

Memory: 1001.2MiB

Processor: 13th Gen Intel Core i5-13500HX

Graphics: Unknown

OS type: 32-bit

Disk: 20.3GB

实验步骤

  1. 1. 使用gcc对test1.c文件进行编译得到执行文件
  2. 2. 运行执行文件得到test1.c的运行结果
  3. 3. 打开codeblocks创建项目并创建文件
  4. 4. 通过编程实现对meminfo/loadavg/interrupts/filesystems的观测
  5. 5. 对2和4的结果进行解读

实验结果

结果展示

test1.c文件结果

编程实现观测结果

              

结果解读

test1.c文件

1. CPU类型及型号: 13th Gen Intel(R) Core(TM) i5-13500HX,由英特尔公司制造。它是第13代Intel Core系列中的一款型号为i5-13500HX的处理器。这意味着它是一款高性能的处理器,适用于各种计算任务。

2. 内核版本: Linux version 3.2.0-29-generic-pae:这是系统中正在运行的Linux内核的版本号。

3. (gcc version 4.6.3(ubuntu/Linaro 4.6.3-1ubuntu5)):这是关于系统中安装的GNU编译器套件(GCC)的版本信息。GCC是一种广泛使用的编译器,用于编译C、C++等编程语言。这里显示的版本是4.6.3,是由Ubuntu和Linaro进行了一些定制。

4. 46-ubuntu SMP Fri Jul 27 17:25:43 UTC 2012:这是关于Linux内核的编译信息,指示了内核的构建时间和日期。"SMP"表示对称多处理,表明内核支持多核处理器系统。 "Fri Jul 27 17:25:43 UTC 2012" 是内核构建的日期和时间信息。

编程实现观测结果

1. Meminfo(内存信息)(部分):

   - MemTotal:系统总内存量,以KB为单位。

   - MemFree:系统空闲内存量,以KB为单位。

   - Buffers:用于缓冲的内存量,以KB为单位。

   - Cached:用于缓存的内存量,以KB为单位。

   - SwapTotal:交换空间总量,以KB为单位。

   - SwapFree:交换空间空闲量,以KB为单位。

   - SwapCached:用于缓存的交换空间量,以KB为单位。

2. Loadavg(负载平均值):

   - 负载平均值由三个数字组成,分别表示过去1分钟、5分钟和15分钟内的平均负载。

   - 一般来说,负载平均值小于CPU核心数量是比较正常的,超过这个值可能表示系统资源不足。

3. Interrupts(中断):

   - 这个输出结果中列出了每个中断向量(IRQ)对应的中断计数。

   - 通过观察中断计数,可以了解系统中各种设备的活动情况,以及是否存在某些设备产生过多的中断。

4. Filesystems(文件系统):

   - 这个文件列出了系统中已挂载的文件系统的详细信息。

   - 对于每个文件系统,可以查看其类型、挂载点、总空间、已使用空间和可用空间等信息。

6.核心代码

#include <stdio.h>

#include <string.h>

#include <time.h>

#include <stdlib.h>

// observing meminfo

void meminfo(){

    FILE *fp = NULL;

    char string[1024];

    fp = fopen("/proc/meminfo", "r");

    if (fp == NULL) {

        printf("open /proc/meminfo failed\n");

        return;

    }

    while (fgets(string, sizeof(string), fp)) {

        printf("%s", string);

    }

    fclose(fp);

}

// observing loadavg

void loadavg(){

    FILE *fp = NULL;

    char string[1024];

    fp = fopen("/proc/loadavg", "r");

    if (fp == NULL) {

        printf("open /proc/loadavg failed\n");

        return;

    }

    while (fgets(string, sizeof(string), fp)) {

        printf("%s", string);

    }

    fclose(fp);

}

// observing interrupts

void interrupts(){

    FILE *fp = NULL;

    char string[1024];

    fp = fopen("/proc/interrupts", "r");

    if (fp == NULL) {

        printf("open /proc/interrupts failed\n");

        return;

    }

    while (fgets(string, sizeof(string), fp)) {

        printf("%s", string);

    }

    fclose(fp);

}

// observing filesystems

void filesystems(){

    FILE *fp = NULL;

    char string[1024];

    fp = fopen("/proc/filesystems", "r");

    if (fp == NULL) {

        printf("open /proc/filesystems failed\n");

        return;

    }

    while (fgets(string, sizeof(string), fp)) {

        printf("%s", string);

    }

}

int main(int argc, char *argv[]) {

    meminfo();

    loadavg();

    interrupts();

    filesystems();

    return 0;

}

  • 28
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还有糕手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值