Alarm-Clock 实验过程|学习笔记

简介: 快速学习 Alarm-Clock 实验过程

开发者学堂课程【高校精品课-西安电子科技大学-操作系统课程设计Alarm-Clock 实验过程】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/74/detail/15857


Alarm-Clock 实验过程

 

实操演示

操作系统课程设计实现 alarm-clock 实验。

在阿里云的平台的实验环境在 home 目录下,进入实验环境,打开 src 文件夹之后,可以看到 pintos 系统下包含了以下的文件夹和文件。本节课需要着重关注的是 threads 和 devices 这两个文件夹。所需要修改的内容都在这两个文件夹中。

root@izuf698je0a4rvsgpz2d2xZ:/home# pwd

/home

root@izuf698je0a4rvsgpz2d2xZ:/home# ls

Xd

root@izuf698je0a4rvsgpz2d2xZ:/home# cd xd

root@izuf698je0a4rvsgpz2d2xZ:/home/xd# ls

Os

root@izuf698je0a4rvsgpz2d2xZ:/hame/xd# cd os/

root@izuf698je0a4rvsgpz2d2xZ: /hone/xd/os# ls

bochs-2.6.7 bochs-2.6.7.tar.gz pintos  pintos.tar.gz

root@izuf698je0a4rvsgpz2d2xZ:home/xd/os# cd pintos

root@izuf698je0a4rvsgpz2d2xZ:/home/xd/os/pintos ls

src

root@lzuf698je0a4rvsgpzzd2xZ:/home/xd/os/pintos cd sre/

root@lzuf698je0a4rvsgpzzd2xZ:/home/xd/os/pintos/src# ls

Devices  lib  makefile  makefile.userprog  threads  vm

Examples  license  makefile.build  misc  userprog

Filesys  make.config  makefile.kernel  tests  untils

root@lzuf698je0a4rvsgpzzd2xZ: /home/xd/os/pintos/src# cd

首先进入 threads 可以看文件夹下的一些文件,包括上节提到的threads.c、threads.h。这里先打开 threads.h 查看

root@lzuf698je0a4rvsgpzzd2xZ:/home/xd/os/pintos/src/threads# geany thread.h

这里使用的编辑器为 journey,如果有其他的编辑器也是可以的。打开之后,可以通过左侧边栏,找到 thread 结构体。

 image.png

然后在大约九十五行的位置,加入定义线程阻塞的时间,然后在后面写上注释(int block_ticks;/*block_time*/)。在结构体修改后,来修改 timer_sleep 文件,timer_sleep 函数位于 devices 目录下的timer.c中找到 timer_sleep 函数,对其原始的代码进行重新的定义。对 timer_sleep 函数重新定义之后,检查一遍代码,如果没有错误就退出界面。

{

If ticks > 0){

Enum intr lever old level

Struct thread *t;

T = threads current();

T ->block ticks = ticks

Old level = intr disable

Threads block();

Intr set level (old level)

}

接下来回到 thread.h 文件夹中来定义阻塞检测。

root@lzuf698je0a4rvsgpzzd2xZ:/home/xd/os/pintos/src/threads# geany thread.h

第一步需要编辑定义 block check 的函数,定义在线程的图文件当中,这里可以拉到最下方。

Void block check(struct thread *t,void *aux UNUSED);

定义完后进行检查,然后保存退出。

在图文件中声明了 block check 之后,然后还要去 thread.c 中对 block check 的函数进行新的定义。可以在文件的末尾来对其进行定义。

Void block check(struct thread *t ,void *aux UNUSED)

{

If(t->status == THREAD_BLOCKED && t->block ticks>0)

{

t->block ticks --;

If(t->block ticks ==0  )

{

Thread unblock(t);

}

检查过后保存退出,需要对定义的 block check 函数进行调用,需要在 timer.c 文件中修改,在大约一百八十五行的位置。

Ticks++;

Enum intr level old level;

这是定义的这行代码,其含义是记录原来的终段状态。 

Old level =intr disable();

这段代码含义为 thread 函数要求关中段。

Thread foreacj(block check ,NULL)

Intr set level (old level);

检查目录后保存退出,在经过这几个步骤的修改后,来到 threads 目录下,对实验成果进行检测。

image.png

具体检测命令是 Make check,然后可以在终端看到一共有七项配置通过,本次实验结束。

相关文章
|
3月前
|
编解码 安全 Linux
Clock sources, Clock events, sched_clock() and delay timers【ChatGPT】
Clock sources, Clock events, sched_clock() and delay timers【ChatGPT】
|
6月前
|
芯片
微机实验二 || 8253定时计数器方波实验
微机实验二 || 8253定时计数器方波实验
162 0
MSP430F5529库函数定时器A——捕获实验
MSP430F5529库函数定时器A——捕获实验
268 0
|
Linux 异构计算 Windows
如何expanded time来观察信号到来的先后顺序?(仿真工具使用技巧)【Modesim/Questasim】
如何expanded time来观察信号到来的先后顺序?(仿真工具使用技巧)【Modesim/Questasim】
如何expanded time来观察信号到来的先后顺序?(仿真工具使用技巧)【Modesim/Questasim】
|
监控 数据可视化 开发工具
放学前的最后几分钟,看懂monitor系统函数【Verilog高级教程】
放学前的最后几分钟,看懂monitor系统函数【Verilog高级教程】
放学前的最后几分钟,看懂monitor系统函数【Verilog高级教程】
|
开发者
priority task2 实验过程|学习笔记
快速学习 priority task2 实验过程
108 0
priority task2 实验过程|学习笔记
|
Linux 开发者
第六章--定时测量
        定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的。 一、时钟和定时器电路         在80x86体系结构上,内核必须显示地与几种时钟和定时器电路打交道。
1027 0
|
调度 开发者
priority task1 实验过程|学习笔记
快速学习 priority task1 实验过程
100 0