- 博客(17)
- 资源 (27)
- 收藏
- 关注
原创 C变长参数
///变长参数,参照《程序员的自我修养》,贴在此处学习下#define va_list char*#define va_start(ap,arg) (ap=(va_list)&arg+sizeof(arg))//指向第一个变长参数#define va_arg(ap,t) (*(t*)((ap+=sizeof(t))-sizeof(t)))//逐个取得待处理的参数#define va
2012-05-17 15:13:40
438
原创 minix块高速缓存的模拟实现
觉得minix的块高速缓存很不错,参照《minix操作系统设计与实现》代码和思想自己写了一遍,练练手。。。图片也来源于此书。。。minix块高速缓存主要分为,空闲链表LRU和hash表。当数据块的引用计数count为零时将hash表中的数据块放入空闲链表中,但此时并不将其从hash链中删除,因为可能后续的请求还会要求此数据块,当后续调用getBlock()请求此数据块时,先在has
2012-05-17 14:13:46
690
转载 HTK3.4.1在Windows 下HSLab **.sig应用无效的解决办法
此文为转载,原文地址为:http://www.bwkeji.com/a/wangzhanjichu/shujuku/20110904/2907.html教养之于心肠,其首要如同食品之于身材。 在Windows 7上安装了HTK3.4.1版本,安装后应用HSLab 01.sig,提示如下错误: ERROR [+6870] MakeXGraf: Not com
2011-11-17 22:08:35
1134
原创 Minix创建文件:creat,open操作
本文参照《操作系统:设计与实现》,文章中很多语句与图表来自此书。在POSIX中,OPEN调用可以用于创建一个新文件和截断一个老文件,因此CREAT调用实现的是OPEN的一个子集。MINIX中CREAT和OPEN的过程分别是do_creat()和do_open()来实现,这些函数位于/src/fs/open.c中。打开或创建一个文件包括三步:1)找到i-节点(创建文件时需要进行分配和初始
2011-06-14 15:21:00
1701
原创 浮点数加性误差
#include void main(void){ float x; for(x=0;x { printf("%f ",x); }} 此程序将产生加性误差。做小数叠加时,最好步进书为2的整数倍。从而避免误差。
2011-06-14 15:20:00
584
原创 Minix块高速缓存
参照《操作系统:设计与实现》文中代码与文字很多出自此书。Minix块高速缓存如下图所示:相关数据结构如下:此数据结构在/src/fs/buf.h中struct buf { /* Data portion of the buffer. */ union {/*公用体,可用来普通存储数据,目录,i节点,位图*/ char b__data[BLOCK_SIZE]; /* ordinary user data */ struct direct b__dir[NR_DIR_ENTRIES]
2011-05-17 22:36:00
715
原创 Minix文件系统概述
参照《操作系统:设计与实现》,本文中的很多文字和图片来源于此书。MINIX文件系统是一个逻辑的、自包含的实体。在磁盘上它由六部分组成,分别是:引导块,超块、i-节点、i-节点位图、区段位图、数据块。具体结构如下图所示:每个文件系统都以引导块开始,引导块的最后两个字节是魔数0x55AA.引导块大小为数据块的一块,一般为512字节。启动计算机时,硬件从引导设备将磁盘的引导块读入内存,转而执行其代码,接下来引导块负责将操作系统从磁盘读入内存,并启动操作系统。超级块包含了文件系统的布局信息,它的主要功能是给出文件系
2011-04-28 23:29:00
1556
原创 Minix中exec的实现
参照《操作系统:设计与实现》。文章中大部分文字和图片来源于此书。书籍中以在shell命令端输入命令创建进程为例来讲解EXEC系统调用。它完成的工作如下:1.检查权限---文件是否可执行?2.读取文件头得到各段长度和总长度。3.从调用者处取参数和环境。4.分配新内存和释放旧内存。5.把堆栈复制到新的内存映像中。6.把数据(可能还有正文段)段复制到新的内存映像中。7.检查处理setuid、setgid位。8.设置进程表项。9.告诉内核进程现在是可运行的。例:在shell终端输入如下命令。ls -l f.cg.c
2011-04-25 22:58:00
1005
原创 Minix进程的退出
参照《操作系统:设计与实现》,有些文字出自此书。进程退出时内存管理器会调用EXIT系统调用。最终会调用mm_exit()这个函数。这个函数所作的主要工作是释放进程的内存,并将进程的子进程变成INIT的进程的子进程,成为僵死进程。主要操作的数据结构仍然为mproc[]数组表项。但当父进程在等待子进程退出时,此函数才会将表项清空。否则挂起此进程即将状态设为HANGING。等待父进程执行WAIT系统调用。WAIT系统调用最终调用do_waitpid()函数此函数和mm_exit()函数都处于/src/mm/For
2011-04-25 17:05:00
784
原创 Minix中fork函数的实现
<br />参照《操作系统:设计与实现》。很多文字是从此书中直接摘抄下来的。之所以摘抄此文是为了加深自己的印象。在创建和撤销进程时必须分配或释放内存、必须更新进程表,包括由内核和FS保存的部分。进程创建是由FORK完成的。执行步骤如下: 1.检查进程表是否满了
2011-04-20 17:15:00
1142
原创 Minix内存管理概述
参照《操作系统:设计与实现》第二版。内存管理有两个非常关键和基本的数据结构:进程表、空洞表。1.内存管理器的进程表叫:mproc。/src/mm/mproc.h中定义如下:EXTERN struct mproc {struct mem_map mp_seg[NR_SEGS];/* points to text, data, stack */ char mp_exitstatus; /* storage for status when process exits */ char mp_sigstatus
2011-04-17 23:12:00
1351
原创 数字翻转机
#include <stdio.h><br />typedef unsigned int uint32; <br />void main(void)<br />{<br /> uint32 b=2;<br /> uint32 c=1;<br /> <br /> printf("%x", ( (volatile)(0xffffffff+(c-b) ) )+1 ); b=1; c=2; printf("%x", ( (volatile)(0xffffffff+(c-b) ) )+1 );<br />} 翻
2010-08-16 22:51:00
392
原创 vc函数反汇编初析
////////////////////原函数////////////////////////////////////////#include <memory.h>void main(void)<br />{<br /> char data[2];<br /> int i;<br /> i=1;<br /> memset(data,0,i);<br /> i++;<br />}//////////////////////////////////////////////////////////////////
2010-06-30 15:34:00
373
原创 C语言中位域的使用及整体赋值
#include typedef struct _byte ByteType;struct _byte /*定义一个字节中的每个位,当然int是十六位的*/ { int b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;};void main(vo
2010-01-16 21:08:00
5605
原创 内存分配时对齐
下面的代码载自libxml中的xmlmemmory.c#ifdef SUN4#define ALIGN_SIZE 16#else#define ALIGN_SIZE sizeof(double)#endif#define HDR_SIZE sizeof(MEMHDR)#define RESERVE_SIZE (((HDR_SIZE + (ALIGN_SIZE-1)) /
2009-12-16 16:56:00
529
原创 softnet_data结构和napi_struct结构
struct softnet_data。{ struct net_device *output_queue; struct sk_buff_head input_pkt_queue; struct list_head poll_list; struct sk_buff *completion_queue; struct napi_str
2009-12-13 00:41:00
3943
原创 packet_type数据结构
struct packet_type { __be16 type; /* This is really htons(ether_type). */ struct net_device *dev; /* NULL is wildcarded here */ int (*func) (struct sk_buff
2009-12-12 22:36:00
2340
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人