⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dev.cc

📁 南京航空航天大学开发的一个类Unix和Linux的操作系统,好不好看看就知道了,
💻 CC
字号:
#include <lib/root.h>#include <asm/io.h>#include <lib/ostream.h>#include <fs/inode.h>#include "dev.h"#include "fd.h"blkdev_t * blkdevvec[MAXBLKDEV];static ulong nrsect, nrtime, nwsect, nwtime;void dumpblkio(ostream_t * os){	os->write("Read %d sectors in %d block io\n", nrsect, nrtime);	os->write("Write %d sectors in %d block io\n", nwsect, nwtime);}blkdev_t::~blkdev_t(){}int openblkfd(int flags, inode_t * inode, fdes_t ** fdes){	blkdev_t * blkdev = getblkdev(inode->getrdev());	if (!blkdev)		return EINVAL;	return blkdev->open(flags, inode, fdes);}int blkdev_t::open(int flags, inode_t * inode, fdes_t ** fdes){	blkfd_t * f = new blkfd_t();	f->type = BLKFD;	f->fdflags = flags;	f->refcnt = 1;	(f->inode = inode)->hold();	f->rdev = inode->getrdev();	f->blkdev = this;	f->blkdevsize = getsize(inode->getrdev());	f->curpos = 0;	*fdes = f;	return 0;}#define X 0void blkdev_t::addreq(int rw, buf_t * b){	req_t * req;	cli();	allege(b->locked());	foreach (req, reqq) {		if ((req != curreq) && req->merge(rw, b)) {			sti();			return;		}	}#if X 	if (reqsema.wouldblock())/* start IO immeadiately */		doreq();	reqsema.down();#endif	reqq.insertlt(new req_t(rw, b));	sti();}void blkdev_t::doreq(req_t * r){	if (r->cmd == BREAD)		nrtime++, nrsect += r->nsect;	else		nwtime++, nwsect += r->nsect;	curreq = r;	docurreq();}void blkdev_t::doreq(){	cli();	if (reqq.empty() || curreq) {		sti();		return;	}	doreq(reqq.head());	sti();}/* called during interrupt */void blkdev_t::endcurreq(){	assert(!curreq->more());	req_t * next = curreq->next;	reqq.unlink(curreq);	dispose(&curreq);#if X	reqsema.up();#endif	if (reqq.empty())		return;	doreq((next == reqq.vnode()) ? reqq.head() : next);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -