<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xiaojialin的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xiaojialin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiaojialin]]></copyright><item><title><![CDATA[C变长参数]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/7576545</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/7576545</guid><author>xiaojialin</author><pubDate>Thu, 17 May 2012 15:13:40 +0800</pubDate><description><![CDATA[///变长参数，参照《程序员的自我修养》，贴在此处学习下
#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]]></description><category></category></item><item><title><![CDATA[minix块高速缓存的模拟实现]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/7521520</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/7521520</guid><author>xiaojialin</author><pubDate>Thu, 17 May 2012 14:13:46 +0800</pubDate><description><![CDATA[觉得minix的块高速缓存很不错，参照《minix操作系统设计与实现》代码和思想自己写了一遍，练练手。。。图片也来源于此书。。。



minix块高速缓存主要分为，空闲链表LRU和hash表。当数据块的引用计数count为零时将hash表中的数据块放入空闲链表中，但此时并不将其从hash链中删除，因为可能后续的请求还会要求此数据块，当后续调用getBlock()请求此数据块时，先在has]]></description><category></category></item><item><title><![CDATA[HTK3.4.1在Windows 下HSLab **.sig应用无效的解决办法]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/6984762</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/6984762</guid><author>xiaojialin</author><pubDate>Thu, 17 Nov 2011 22:08:35 +0800</pubDate><description><![CDATA[此文为转载，原文地址为：
http://www.bwkeji.com/a/wangzhanjichu/shujuku/20110904/2907.html




教养之于心肠，其首要如同食品之于身材。 在Windows 7上安装了HTK3.4.1版本，安装后应用HSLab  01.sig，提示如下错误：
  ERROR [&＃43;6870]  MakeXGraf: Not com]]></description><category></category></item><item><title><![CDATA[Minix创建文件：creat,open操作]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/6543913</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/6543913</guid><author>xiaojialin</author><pubDate>Tue, 14 Jun 2011 15:21:00 +0800</pubDate><description><![CDATA[本文参照《操作系统：设计与实现》，文章中很多语句与图表来自此书。在POSIX中，OPEN调用可以用于创建一个新文件和截断一个老文件，因此CREAT调用实现的是OPEN的一个子集。MINIX中CREAT和OPEN的过程分别是do_creat()和do_open()来实现，这些函数位于/src/fs/open.c中。打开或创建一个文件包括三步：1）找到i-节点（创建文件时需要进行分配和初始]]></description><category></category></item><item><title><![CDATA[浮点数加性误差]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/6543902</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/6543902</guid><author>xiaojialin</author><pubDate>Tue, 14 Jun 2011 15:20:00 +0800</pubDate><description><![CDATA[#include void main(void){     float x;     for(x=0;x    {          printf("%f ",x);    }} 此程序将产生加性误差。做小数叠加时，最好步进书为2的整数倍。从而避免误差。]]></description><category></category></item><item><title><![CDATA[Minix块高速缓存 ]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/6428112</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/6428112</guid><author>xiaojialin</author><pubDate>Tue, 17 May 2011 22:36:00 +0800</pubDate><description><![CDATA[参照《操作系统：设计与实现》文中代码与文字很多出自此书。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]]]></description><category></category></item><item><title><![CDATA[Minix文件系统概述]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/6370862</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/6370862</guid><author>xiaojialin</author><pubDate>Thu, 28 Apr 2011 23:29:00 +0800</pubDate><description><![CDATA[参照《操作系统：设计与实现》，本文中的很多文字和图片来源于此书。MINIX文件系统是一个逻辑的、自包含的实体。在磁盘上它由六部分组成，分别是：引导块，超块、i-节点、i-节点位图、区段位图、数据块。具体结构如下图所示：每个文件系统都以引导块开始，引导块的最后两个字节是魔数0x55AA.引导块大小为数据块的一块，一般为512字节。启动计算机时，硬件从引导设备将磁盘的引导块读入内存，转而执行其代码，接下来引导块负责将操作系统从磁盘读入内存，并启动操作系统。超级块包含了文件系统的布局信息，它的主要功能是给出文件系]]></description><category></category></item><item><title><![CDATA[Minix中exec的实现]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/6362905</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/6362905</guid><author>xiaojialin</author><pubDate>Mon, 25 Apr 2011 22:58:00 +0800</pubDate><description><![CDATA[参照《操作系统：设计与实现》。文章中大部分文字和图片来源于此书。书籍中以在shell命令端输入命令创建进程为例来讲解EXEC系统调用。它完成的工作如下：1.检查权限---文件是否可执行？2.读取文件头得到各段长度和总长度。3.从调用者处取参数和环境。4.分配新内存和释放旧内存。5.把堆栈复制到新的内存映像中。6.把数据(可能还有正文段)段复制到新的内存映像中。7.检查处理setuid、setgid位。8.设置进程表项。9.告诉内核进程现在是可运行的。例：在shell终端输入如下命令。ls -l f.cg.c]]></description><category></category></item><item><title><![CDATA[Minix进程的退出]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/6362131</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/6362131</guid><author>xiaojialin</author><pubDate>Mon, 25 Apr 2011 17:05:00 +0800</pubDate><description><![CDATA[参照《操作系统：设计与实现》，有些文字出自此书。进程退出时内存管理器会调用EXIT系统调用。最终会调用mm_exit()这个函数。这个函数所作的主要工作是释放进程的内存，并将进程的子进程变成INIT的进程的子进程，成为僵死进程。主要操作的数据结构仍然为mproc[]数组表项。但当父进程在等待子进程退出时，此函数才会将表项清空。否则挂起此进程即将状态设为HANGING。等待父进程执行WAIT系统调用。WAIT系统调用最终调用do_waitpid()函数此函数和mm_exit()函数都处于/src/mm/For]]></description><category></category></item><item><title><![CDATA[Minix中fork函数的实现]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/6336587</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/6336587</guid><author>xiaojialin</author><pubDate>Wed, 20 Apr 2011 17:15:00 +0800</pubDate><description><![CDATA[<br />参照《操作系统：设计与实现》。很多文字是从此书中直接摘抄下来的。之所以摘抄此文是为了加深自己的印象。在创建和撤销进程时必须分配或释放内存、必须更新进程表，包括由内核和FS保存的部分。进程创建是由FORK完成的。执行步骤如下： 1.检查进程表是否满了]]></description><category></category></item><item><title><![CDATA[Minix内存管理概述]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/6330052</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/6330052</guid><author>xiaojialin</author><pubDate>Sun, 17 Apr 2011 23:12:00 +0800</pubDate><description><![CDATA[参照《操作系统：设计与实现》第二版。内存管理有两个非常关键和基本的数据结构：进程表、空洞表。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]]></description><category></category></item><item><title><![CDATA[数字翻转机]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/5816732</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/5816732</guid><author>xiaojialin</author><pubDate>Mon, 16 Aug 2010 22:51:00 +0800</pubDate><description><![CDATA[#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 />} 翻]]></description><category></category></item><item><title><![CDATA[vc函数反汇编初析]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/5704768</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/5704768</guid><author>xiaojialin</author><pubDate>Wed, 30 Jun 2010 15:34:00 +0800</pubDate><description><![CDATA[////////////////////原函数////////////////////////////////////////#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 />}//////////////////////////////////////////////////////////////////]]></description><category></category></item><item><title><![CDATA[C语言中位域的使用及整体赋值]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/5200859</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/5200859</guid><author>xiaojialin</author><pubDate>Sat, 16 Jan 2010 21:08:00 +0800</pubDate><description><![CDATA[#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]]></description><category></category></item><item><title><![CDATA[内存分配时对齐]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/5019800</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/5019800</guid><author>xiaojialin</author><pubDate>Wed, 16 Dec 2009 16:56:00 +0800</pubDate><description><![CDATA[ 下面的代码载自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)) /    ]]></description><category></category></item><item><title><![CDATA[softnet_data结构和napi_struct结构]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/4994701</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/4994701</guid><author>xiaojialin</author><pubDate>Sun, 13 Dec 2009 00:41:00 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[packet_type数据结构 ]]></title><link>https://blog.youkuaiyun.com/xiaojialin/article/details/4994161</link><guid>https://blog.youkuaiyun.com/xiaojialin/article/details/4994161</guid><author>xiaojialin</author><pubDate>Sat, 12 Dec 2009 22:36:00 +0800</pubDate><description><![CDATA[struct packet_type {    __be16            type;    /* This is really htons(ether_type). */    struct net_device    *dev;    /* NULL is wildcarded here     */    int            (*func) (struct sk_buff ]]></description><category></category></item></channel></rss>