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,然后可以在终端看到一共有七项配置通过,本次实验结束。

相关文章
|
1月前
|
存储 iOS开发 MacOS
Python模块操作:time—Clock Time(二)
Python模块操作:time—Clock Time(二)
|
5月前
|
芯片
微机实验二 || 8253定时计数器方波实验
微机实验二 || 8253定时计数器方波实验
|
前端开发 芯片
【芯片前端】关于set_input_delay/set_output_delay慢信号约束到快时钟的思考
【芯片前端】关于set_input_delay/set_output_delay慢信号约束到快时钟的思考
368 0
|
调度
TM4C123库函数学习(2)--- LED闪烁,滴答定时器精准延时
TM4C123库函数学习(2)--- LED闪烁,滴答定时器精准延时
363 0
|
Linux 异构计算 Windows
如何expanded time来观察信号到来的先后顺序?(仿真工具使用技巧)【Modesim/Questasim】
如何expanded time来观察信号到来的先后顺序?(仿真工具使用技巧)【Modesim/Questasim】
如何expanded time来观察信号到来的先后顺序?(仿真工具使用技巧)【Modesim/Questasim】
|
开发者
priority task2 实验过程|学习笔记
快速学习 priority task2 实验过程
101 0
priority task2 实验过程|学习笔记
|
Unix Python
Python编程:time时间模块
Python编程:time时间模块
196 0
Python编程:time时间模块
|
调度 开发者
priority task1 实验过程|学习笔记
快速学习 priority task1 实验过程
|
存储 传感器 程序员
STM32F4---通用定时器更新中断
STM32F4 的定时器功能十分强大,有TIME1 和 TIME8 等高级定时器,也有 TIME2-TIME5,TIM9-TIM14 等通用定时器,还有 TIME6 和 TIME7 等基本定时器,总共达 14 个定时器之多。
STM32F4---通用定时器更新中断