操作系统导论-课后作业-ch19

1.

本书在第6章中有过介绍,gettimeofday函数最多精确到us,并且大致精确(并不完全精确),需要多迭代几次减少误差,循环次数太多也会导致结束时间小于开始时间(即回滚)的现象,需要权衡。

2.

代码如下:

c 复制代码
#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>

#define PGSIZE 4096

//return us
int time_diff(struct timeval* t1, struct timeval* t2) {
    return (t2->tv_sec - t1->tv_sec) * 1000000 + (t2->tv_usec - t1->tv_usec);
}

int main(int argc, char* argv[]) {
    if (argc != 3) {
        fprintf(stderr, "too many or too few arguments\n");
        exit(1);
    }
    int i;
    int pageCount = atoi(argv[1]);
    int num = atoi(argv[2]);
    struct timeval curr, now;
    int size = (pageCount * PGSIZE) / sizeof(int);
    int arr[size];
    if (gettimeofday(&curr, NULL) == -1) {
        fprintf(stderr, "gettimeofday error\n");
        exit(1);
    }
    for (i = 0; i < num; ++i) {
        arr[(rand() % pageCount) * (PGSIZE / sizeof(int))] = i;
    }
    if (gettimeofday(&now, NULL) != 0) {
        fprintf(stderr, "gettimeofday error\n");
        exit(1);
    }
    printf("time elaps %d us\n", time_diff(&curr, &now));
    return 0;
}

运行结果如下:

100000次访问消耗1230us,平均每次访问时间为12.3ns

3.

c 复制代码
#!/usr/bin/env python
import os
i = 1
while i < 2000 :
        print '\npage num ' + str(i)
        val = os.system('./tlb ' + str(i) + ' ' + str(10000))
        i = i * 2

本处有点问题,可参考python------报错解决:/usr/bin/env: 'python\r': No such file or directory

运行结果如下所示:

4.

5.

禁止编译器优化,有两个方案,一个是在编译的时候增加选项-O0

6.

如果进程运行移到了另一个cpu,则很容易导致tlb需要重新缓存,命中率大大降低,需要加以限制

7.

修改代码tlb.c,添加初始化逻辑:

测试结果如下:

和题2测试结果相比,确实时间减少了不少

相关推荐
ErizJ21 小时前
面试 | 操作系统
linux·面试·职场和发展·操作系统·os
柏木乃一21 小时前
Linux线程(8)基于单例模式的线程池
linux·运维·服务器·c++·单例模式·操作系统·线程
CS创新实验室1 天前
从硬件抽象到意图对齐:论 AI 时代操作系统演进的逻辑必然与 OpenClaw 的范式价值
人工智能·操作系统·策略模式
香水5只用六神2 天前
【RTOS快速入门】07_同步互斥与通信概述
单片机·嵌入式硬件·学习·操作系统·freertos·rtos·嵌入式软件
棉花糖超人2 天前
【操作系统】一、操作系统简介
linux·服务器·操作系统
数据中穿行2 天前
Linux内核内存管理:源码组成、设计原理与关键点
操作系统
程序员一点3 天前
第17章:SELinux 与系统安全机制
安全·操作系统·系统安全·openeuler·selinux
_OP_CHEN3 天前
【Linux系统编程】(四十五)线程池基础:日志系统设计与策略模式的优雅落地
linux·操作系统·线程池·进程·策略模式·c/c++·日志系统
_OP_CHEN3 天前
【Linux系统编程】(四十七)线程安全与线程锁深度解析:从概念到实战,避坑指南全掌握
linux·操作系统·线程池·进程·线程安全·c/c++·线程锁
♛识尔如昼♛3 天前
操作系统(4)第二章- 进程通信
操作系统·进程·ipc