资源简介
斯坦福大学课程设计pintos-project3满分例程,ubuntu16.04 qemu 满分(修改userprog/Make.vars 默认qemu)。注释不多,部分内容参考github。代码仅供参考,请勿直接搬运。
代码片段和文件信息
#include “devices/block.h“
#include
#include
#include
#include “devices/ide.h“
#include “threads/malloc.h“
/* A block device. */
struct block
{
struct list_elem list_elem; /* Element in all_blocks. */
char name[16]; /* Block device name. */
enum block_type type; /* Type of block device. */
block_sector_t size; /* Size in sectors. */
const struct block_operations *ops; /* Driver operations. */
void *aux; /* Extra data owned by driver. */
unsigned long long read_cnt; /* Number of sectors read. */
unsigned long long write_cnt; /* Number of sectors written. */
};
/* List of all block devices. */
static struct list all_blocks = LIST_INITIALIZER (all_blocks);
/* The block block assigned to each Pintos role. */
static struct block *block_by_role[BLOCK_ROLE_CNT];
static struct block *list_elem_to_block (struct list_elem *);
/* Returns a human-readable name for the given block device
TYPE. */
const char *
block_type_name (enum block_type type)
{
static const char *block_type_names[BLOCK_CNT] =
{
“kernel“
“filesys“
“scratch“
“swap“
“raw“
“foreign“
};
ASSERT (type < BLOCK_CNT);
return block_type_names[type];
}
/* Returns the block device fulfilling the given ROLE or a null
pointer if no block device has been assigned that role. */
struct block *
block_get_role (enum block_type role)
{
ASSERT (role < BLOCK_ROLE_CNT);
return block_by_role[role];
}
/* Assigns BLOCK the given ROLE. */
void
block_set_role (enum block_type role struct block *block)
{
ASSERT (role < BLOCK_ROLE_CNT);
block_by_role[role] = block;
}
/* Returns the first block device in kernel probe order or a
null pointer if no block devices are registered. */
struct block *
block_first (void)
{
return list_elem_to_block (list_begin (&all_blocks));
}
/* Returns the block device following BLOCK in kernel probe
order or a null pointer if BLOCK is the last block device. */
struct block *
block_next (struct block *block)
{
return list_elem_to_block (list_next (&block->list_elem));
}
/* Returns the block device with the given NAME or a null
pointer if no block device has that name. */
struct block *
block_get_by_name (const char *name)
{
struct list_elem *e;
for (e = list_begin (&all_blocks); e != list_end (&all_blocks);
e = list_next (e))
{
struct block *block = list_entry (e struct block list_elem);
if (!strcmp (name block->name))
return block;
}
return NULL;
}
/* Verifies that SECTOR is a valid offset within BLOCK.
Panics if not. */
static void
check_sector (struct block *block block_sector_t sector)
{
if (sector >= block->size)
{
/* We do not use ASSERT because we want to panic here
regardless of whether NDEBUG is defined. */
PANIC (“Access past end of device %s
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-04-02 08:48 src\
文件 34 2019-04-02 08:48 src\.gitignore
文件 4621 2019-04-02 08:48 src\LICENSE
文件 1859 2019-04-02 08:48 src\Make.config
文件 628 2019-04-02 08:48 src\Makefile
文件 3928 2019-04-02 08:48 src\Makefile.build
文件 333 2019-04-02 08:48 src\Makefile.kernel
文件 1551 2019-04-02 08:48 src\Makefile.userprog
目录 0 2019-04-02 08:48 src\devices\
文件 6214 2019-04-02 08:48 src\devices\block.c
文件 2370 2019-04-02 08:48 src\devices\block.h
文件 15400 2019-04-02 08:48 src\devices\ide.c
文件 95 2019-04-02 08:48 src\devices\ide.h
文件 1029 2019-04-02 08:48 src\devices\input.c
文件 223 2019-04-02 08:48 src\devices\input.h
文件 2792 2019-04-02 08:48 src\devices\intq.c
文件 1429 2019-04-02 08:48 src\devices\intq.h
文件 5517 2019-04-02 08:48 src\devices\kbd.c
文件 145 2019-04-02 08:48 src\devices\kbd.h
文件 11102 2019-04-02 08:48 src\devices\partition.c
文件 144 2019-04-02 08:48 src\devices\partition.h
文件 2894 2019-04-02 08:48 src\devices\pit.c
文件 161 2019-04-02 08:48 src\devices\pit.h
文件 3725 2019-04-02 08:48 src\devices\rtc.c
文件 96 2019-04-02 08:48 src\devices\rtc.h
文件 6557 2019-04-02 08:48 src\devices\serial.c
文件 215 2019-04-02 08:48 src\devices\serial.h
文件 3134 2019-04-02 08:48 src\devices\shutdown.c
文件 544 2019-04-02 08:48 src\devices\shutdown.h
文件 2074 2019-04-02 08:48 src\devices\speaker.c
文件 169 2019-04-02 08:48 src\devices\speaker.h
............此处省略613个文件信息
相关资源
- 斯坦福大学课程设计project pintos-proj
- 微机原理与接口技术课程设计-交通信
- 销售订单数据库管理系统
- 数据结构课程设计《全国交通咨询模
- web服务器的课程设计文档
- 数据结构课程设计运动会分数统计
- C/S架构五子棋课程设计报告
- VHDL课程设计--数字秒表
- 机械原理牛头刨床课程设计
- DSP课程设计(基于TMS320F2812的DSP最小系
- 操作系统课程设计用C写的模拟页面置
- uml课程设计自动点餐系统
- VC计算器的详细课程设计
- 51单片机课程设计电子时钟设计
- 汽车尾灯控制电路课程设计实验报告
- 数字电路课程设计 汽车尾灯
- 计算机网络课程设计 企业局域网的组
- 拔河游戏机的逻辑电路设计和实现
- 过、欠压保护电路设计
- 数据结构课程设计 迷宫求解 源码
- 8、停车场管理数据结构课程设计源程
- 课程设计网络嗅探器
- 温度闭环控制
- 从根结点到指定结点的路径 数据结构
- 课程设计dac0832完整版
- 自动门控制装置 西门子PLC课程设计
- 数据结构程序设计通讯录课程设计
- 小功率调幅发射机课程设计
- 设施规划课程设计说明书
- PLC四层简易电梯 梯形图编写.rar
评论
共有 条评论