`
waterlife
  • 浏览: 65806 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
文章列表
Linux中断有两种,一种是由CPU外部产生,另一种是由CPU执行程序的过程中产生。   外部中断(interrupt)完全是异步的,CPU对外部中断的相应完全是被动的,软件可以通过“关中断”指令关闭对中断的相应。   由软件产生的中断,是程序中有意产生的,是主动的,同步的。我们称之为陷阱(trap)。 此外还有一种与中断相似的机制叫做异常(exception),一般也是异步的。   CPU对这三种不同类型的“中断”的相应过程都是基本一致的。就是执行完当前指令或者在执行当前指令的中途,根据中断源提供的“中断向量”,在内存中找到相应的服务程序入口并调用该服务程序。   外部中断的 ...
一个进程可以通过系统调用mmap(),将一个已打开的内容映射到他的用户空间。内核中实现这个函数是sys_mmap2()。   具体的映射是动态的,时常在变。所谓文件与虚存之间的映射包含着两个环节:一是物理页面与文件映像之间的换入,换出;二是物理页面与虚存页面之间的映射。   1. 当区间中的一个页面首次收到访问时,会因为页面无映射,发生缺页异常,相应的页面异常处理函数为do_no_page()。分配一个内存页面并从文件读入相应的页面。   2.建立映射之后,对页面的写操作会使页面变脏,但是页面的内容并不立即写回文件中,而是由内核线程bdflush()周期性的运行page_launch ...
用户进程通过系统调用brk() 向内核申请空间,brk()在内核中由sys_brk实现。brk()对于用户进程在堆上分配的内存进行批量向内核申请。   一个有用户空间映射可换出的页面,同时在三个队列中。一般通过其队列头list链入某换入/换出队列,即相应address_space结构中的 clean_pages, dirty_list和locked_pages三个队列之一;二是通过其队列头lru链入某个LRU队列,即active_list, inactive_dirty_lsit和inactive_clean_list之一;最后是通过next_hash链入一个杂凑队列。当一个页面在某个换入/ ...
Linux对于外设的访问一般有两种方式:一种叫内存映射,另一种叫I/O映射。随着外设的寄存器和自身存贮空间的增加,采用第二种方式已经远远不能满足外设的需要。Linux看到的外设的地址都是总线地址,相应的存贮空间都在系统空间(3GB以上)。   内核为自己保持一个虚存区间队列vmlist,这是由一串vm_struct数据结构组成的一个单链队列。相似于供进程使用的vm_area_struct结构。 struct vm_struct { unsigned long flags; void * addr; unsigned long size; struct vm_struct * ...
Linux内核采用slab方法来管理内核缓冲区,slab类似于面向对象的方法进行内核区的分配和回收。   1. slab可能由1个,2个,4个.......最多32个连续的物理页面构成; 2. 每个slab都有slab的描述结构slab_t,用于同一种对象或多个slab通过 ...
在页面表项和页面目录中P标志为0表示相应的物理页面不在内存,从而无法完成本次访问,cpu就会产生一次缺页异常。当页面在内存时,页面表项是一个pet_t结构,指向一个内存页面;当页面不在内存时,则是一个swap_t结构,指向一个盘上页面。   处理一次因缺页产生的异常,首先要检查相应的页面是否还在swapper_space的换入/换出队列中尚未释放,那就通过read_swap_cache()分配一个内存页面,并且从盘上将其内容读进来。从磁盘读入页面的时候,不是每次仅仅读入一个页面,而是一次读入一个cluster。预读进来的页面暂时链入活跃页面队列以及swapper_space队列,如果实际不需 ...
Linux通过一个守护线程kswapd进行页面的定期换出,这个时间间隔由编译内核是决定。kswapd一般会执行以下两个部分的例行操作: 1. 在发现物理页面短缺的情况下进行的,目的是预先找出一些页面,且将这些页面的映射断开,使这些页面从活跃状态转到不活跃状态,为页面换出做准备。   2. 每次都要执行,目的在于把处于不活跃的脏页面写入交换设备,使他们成为不活跃的“干净”页面,继续缓冲,或进一步回收一些这样的页面成为空闲页面。    
Linux把暂时不用的物理内存页放在交换分区,其中swap_map指向一个数组,该数组中的每一个短整数代表盘上的一个物理页面,而数组的下标决定了该页面在盘上的位置。数组的第一个元素swap_mem[0]表示设备和文件自身的一些信息。 链表swap_list各个swap_info_struct结构按优先级高低连接在一起。   而内存页面的周转有两方面的意思,其一是页面的分配,使用和回收;其二是才是盘区的交换,它的最终目的是页面的回收。并非所有的页面都可以交换出去的,事实上只有映射到用户空间的页面才能被交换,而内核即系统空间的页面不再此列。   按页面的内容和性质,用户空间分为以下几种: ...
IP协议的ipfag结构提供对分片重组的支持,ipq结构表示一个队列,该队列缓冲的都是属于同一个源的分片。当IP协议收到第一个分片的时候创建一个分片队列并起一个timer计时分片超时处理。   offset表示分片偏移,因为该字段只有13bit,为了表示所有的字段偏移,该字段以8字节为单位。且 MF=1,便宜字段0,是一个分片且是第一个分片; MF=1,便宜字段非0,是一个分片且是中间分片; MF=0,便宜字段非0,是一个分片且是最后一个分片; MF=0,便宜字段0,不是分片是一个普通数据包; 当一个数据包的某些分片未接受到,会触发timer超时,会删除所有分片并发送一个IGMP报 ...
ICMP(Internet Control Message Protocol)和IGMP(Internet Group Management Protocol)fenbie用于网络侦错和组播,多播管理。 如下一些常用的IP分组: 224.0.0.1:该子网所有系统组 224.0.0.2:该子网所有路由器组 224.0.1.1:网络时间协议NTP 224.0.0.9:路由协议RIP-2 多播MAC地址是48bit需IP贡献低23位加01:00:5e前缀。 IGMP使用规则: 1.当第一个进程加入一个组时,主机就发送一个IGMP报告。 2.进程离开一个组时,主机不发送IGMP报告。 ...
TCP发起连接的过程: 客户端                                                                                    服务器端  (State:closed)                                                                       (State:listen) ---------------->(SYN连接请求)                       (State:SYN_SENT)                        ...
面向连接的TCP协议(Transmission Control Protocol )是一种面向连接的流式传输协议,它通过三种机制来保证传输的可靠性: 序列号,应答机制和超时重传。tcp中处理超时重传的函数有: tcp_do_transit:处理具体的重传工作; reset_xmit_ti ...
BSD socket层几个函数的介绍: sock_alloc()获取一个inode结构,并初始化返回所需socket结构 sock_release_peer()仅用于UNIX域 sock_release()用于释放关闭一个套接字,调用sock_ops_release,sock_ops是一个proto_ops结构,是一个操作函数的集合; sock_close()call sock_release() call sock_release_peer(); sock_socket(),其中type的判断如下: SOCK_STREAM:流式数据交换TCP SOCK_DGRAM:报文数据交换U ...
Linux的BSD和INET  socket层分别对应于ISO的表示层和会话层,其中有两个比较重要的数据结构: struct socket { socket_state state; unsigned long flags; struct proto_ops *ops; struct inode *inode; struct fasync_struct *fasync_list; /* Asynchronous wake up list */ struct file *file; /* File back pointer for gc */ stru ...
物理页面的分配使用函数: static inline struct page * alloc_pages(unsigned int gfp_mask, unsigned int order)   参数gfp_mask表示分配的策略,order表示所需物理块的大小。gfp_mask作为下标查找数组node_zonelists[]决定具体的分配策略。   其具体分配的流程如下: 1. 如果只分配单个页面且等待分配完成,又不是用于管理目的,把direct_reclaim设为1,就从不活跃的干净页面缓冲队列中回收一块,因为这些页面很难保证连续。   2.如果当前页面总量比较充裕,内存分配 ...
Global site tag (gtag.js) - Google Analytics