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

📄 blok.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#/* *	UNIX shell * *	S. R. Bourne *	Bell Telephone Laboratories * */#include	"defs.h"/* *	storage allocator *	(circular first fit strategy) */#define BUSY 01#define busy(x)	(Rcheat((x)->word)&BUSY)POS		brkincr=BRKINCR;BLKPTR		blokp;			/*current search pointer*/BLKPTR		bloktop=BLK(end);	/*top of arena (last blok)*/ADDRESS	alloc(nbytes)	POS		nbytes;{	REG POS		rbytes = round(nbytes+BYTESPERWORD,BYTESPERWORD);	LOOP	INT		c=0;		REG BLKPTR	p = blokp;		REG BLKPTR	q;		REP	IF !busy(p)			THEN	WHILE !busy(q = p->word) DO p->word = q->word OD				IF ADR(q)-ADR(p) >= rbytes				THEN	blokp = BLK(ADR(p)+rbytes);					IF q > blokp					THEN	blokp->word = p->word;					FI					p->word=BLK(Rcheat(blokp)|BUSY);					return(ADR(p+1));				FI			FI			q = p; p = BLK(Rcheat(p->word)&~BUSY);		PER	p>q ORF (c++)==0 DONE		addblok(rbytes);	POOL}VOID	addblok(reqd)	POS		reqd;{	IF stakbas!=staktop	THEN	REG STKPTR	rndstak;		REG BLKPTR	blokstak;		pushstak(0);		rndstak=round(staktop,BYTESPERWORD);		blokstak=BLK(stakbas)-1;		blokstak->word=stakbsy; stakbsy=blokstak;		bloktop->word=BLK(Rcheat(rndstak)|BUSY);		bloktop=BLK(rndstak);	FI	reqd += brkincr; reqd &= ~(brkincr-1);	blokp=bloktop;	bloktop=bloktop->word=BLK(Rcheat(bloktop)+reqd);	bloktop->word=BLK(ADR(end)+1);	BEGIN	   REG STKPTR stakadr=STK(bloktop+2);	   staktop=movstr(stakbot,stakadr);	   stakbas=stakbot=stakadr;	END}VOID	free(ap)	BLKPTR		ap;{	REG BLKPTR	p;	IF (p=ap) ANDF p<bloktop	THEN	Lcheat((--p)->word) &= ~BUSY;	FI}#ifdef DEBUGchkbptr(ptr)	BLKPTR	ptr;{	INT		exf=0;	REG BLKPTR	p = end;	REG BLKPTR	q;	INT		us=0, un=0;	LOOP	   q = Rcheat(p->word)&~BUSY;	   IF p==ptr THEN exf++ FI	   IF q<end ORF q>bloktop THEN abort(3) FI	   IF p==bloktop THEN break FI	   IF busy(p)	   THEN us += q-p;	   ELSE un += q-p;	   FI	   IF p>=q THEN abort(4) FI	   p=q;	POOL	IF exf==0 THEN abort(1) FI	prn(un); prc(SP); prn(us); prc(NL);}#endif

⌨️ 快捷键说明

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