摘要: 1.分段机制80386的两种工作模式 80386的工作模式包括实地址模式和虚地址模式(保护模式)。Linux主要工作在保护模式下。分段机制 在保护模式下,80386虚地址空间可达16K个段,每段大小可变,最大达4GB。 从逻辑地址到线性地址的转换由80386分段机制管理。段寄存器CS、DS、ES、SS、FS或GS标识一个段。这些段寄存器作为段选择器,用来选择该段的描述符。分段逻辑地址到线性地址转换图图9_7 分段逻辑地址到线性地址转换图2. 分页机制分页机制的作用 分页机制是在段机制之后进行的,它进一步将线性地址转换为物理地址。 80386使用4K字节大小的页,且每页的起始地址都被4... 阅读全文
posted @ 2014-02-24 15:33 johnny_HITWH 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 在Linux中主要提供了fork、vfork、clone三个进程创建方法。问题在linux源码中这三个调用的执行过程是执行fork(),vfork(),clone()时,通过一个系统调用表映射到sys_fork(),sys_vfork(),sys_clone(),再在这三个函数中去调用do_fork()去做具体的创建进程工作。fork fork创建一个进程时,子进程只是完全复制父进程的资源,复制出来的子进程有自己的task_struct结构和pid,但却复制父进程其它所有的资源。例如,要是父进程打开了五个文件,那么子进程也有五个打开的文件,而且这些文件的当前读写指针也停在相同的地方。所以,这. 阅读全文
posted @ 2014-02-21 20:04 johnny_HITWH 阅读(1799) 评论(0) 推荐(0) 编辑
摘要: 另外总结文件锁信号量(Semaphore),有时被称为信号灯,是在多环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将AcquireSemaphoreVI以及ReleaseSemaphoreVI分别放置在每个关键代码段的首末端。确认这些信号量VI引用的是初始创建的信号量。1.信号:(signal)是一种处理异步事件的方式。信号时比较复杂的通信方式,用于通知接受进程有某 阅读全文
posted @ 2014-02-18 10:37 johnny_HITWH 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 源:http://blog.csdn.net/f22jay/article/details/7925531Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段页式机制如下图。(看到这个图回想下实模式和保护模式以,内存分配算法【伙伴系统/内碎片和外碎片的算法】与GDT,LDT,页表的级数和线性空间 阅读全文
posted @ 2014-02-17 17:42 johnny_HITWH 阅读(499) 评论(0) 推荐(0) 编辑
摘要: Linux进程通过一个task_struct结构体描述,在linux/sched.h中定义,通过理解该结构,可更清楚的理解linux进程模型。 包含进程所有信息的task_struct数据结构是比较庞大的,但是该数据结构本身并不复杂,我们将它的所有域按其功能可做如下划分:进程状态(State)进程调度信息(Scheduling Information)各种标识符(Identifiers)进程通信有关信息(IPC:Inter_Process Communication)时间和定时器信息(Times and Timers)进程链接信息(Links)文件系统信息(File System)虚拟内存信. 阅读全文
posted @ 2014-02-17 10:38 johnny_HITWH 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 来源:http://www.bopor.com/?p=652又拍网是一个照片分享社区,从2005年6月至今积累了260万用户,1.1亿张照片,目前的日访问量为200多万。5年的发展历程里经历过许多起伏,也积累了一些经验,在这篇文章会介绍一些在技术上的积累。又拍网和大多数Web2.0站点一样,构建于大量开源软件之上,包括MySQL、PHP、nginx、Python、memcached、redis、Solr、Hadoop和RabbitMQ等等。又拍网的服务器端开发语言主要是PHP和Python,其中PHP用于编写Web逻辑(通过HTTP和用户直接打交道), 而Python则主要用于开发内部服务和后 阅读全文
posted @ 2014-02-15 16:48 johnny_HITWH 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 主要区别是,buffer cache缓存元信息,page cache缓存文件数据buffer 与 cache 是作为磁盘文件缓存(磁盘高速缓存disk cache)来使用,主要目的提高文件系统系性能。具体工作过程参见上一篇blog Linux 内核read工作过程.不同点是buffer以块为大小操作... 阅读全文
posted @ 2014-02-13 17:22 johnny_HITWH 阅读(689) 评论(0) 推荐(0) 编辑
摘要: 弄清硬盘的低格和高格的概念 系统中可以随机访问(不需要按顺序)访问固定大小数据片(chunks)的设备称为块设备,这些数据片就称作块。最常见的块设备是硬盘,除此以外,还有软盘驱动器(floppy),CD-ROM驱动器和闪存等等许多其他块设备。注意,他们都是以安装文件系统的方式使用的-----这也是块设备的一般访问方式。 另一种基本的设备类型是字符设备。字符设备按照字节流的方式被有序访问,像串口和键盘就属于字符设备(网卡??)。如果一个硬件设备以字符流的方式被访问的话,那就应该归于字符设备;反过来,如果一个设备是随机(无序的)访问的,那么就属于块设备。 这两种类型的设备的根本区别在于它... 阅读全文
posted @ 2014-02-13 00:37 johnny_HITWH 阅读(1215) 评论(0) 推荐(0) 编辑
摘要: A buffer is just a container to hold data for a short period of time when more comes in at any given time than a consumer can use / process. It's a first-in, first-out situation - the data comes in, might be buffered, and goes out in the same order it came in, after a while.A cache is a storage 阅读全文
posted @ 2014-02-10 14:34 johnny_HITWH 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 主要部分,四次握手:断开连接其实从我的角度看不区分客户端和服务器端,任何一方都可以调用close(or closesocket)之类的函数开始主动终止一个连接。这里先暂时说正常情况。当调用close函数断开一个连接时,主动断开的一方发送FIN(finish报文给对方。有了之前的经验,我想你应该明白我说的FIN报文时什么东西。也就是一个设置了FIN标志位的报文段。FIN报文也可能附加用户数据,如果这一方还有数据要发送时,将数据附加到这个FIN报文时完全正常的。之后你会看到,这种附加报文还会有很多,例如ACK报文。我们所要把握的原则是,TCP肯定会力所能及地达到最大效率,所以你能够想到的优化方法, 阅读全文
posted @ 2014-01-31 01:06 johnny_HITWH 阅读(2836) 评论(0) 推荐(1) 编辑