易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux中的内存分配和释放之free_bootmem()函数分析

  free_bootmem()这个函数是系统启动初期内存释放的核心函数,我们来看看它的代码。
  void __init free_bootmem (unsigned long addr, unsigned long size)//addr是要释放的物理起始地址,size是要释放空间的大小。
 {
    free_bootmem_core(NODE_DATA(0)->bdata, addr, size);//直接从内存node0号开始释放内存空间。
 }//可以看出真正的核心函数是free_bootmem_core()这个函数,这个才是核心部分。我们来看看它的具体内容吧。
  static void __init free_bootmem_core(bootmem_data_t *bdata, unsigned long addr, unsigned long size)
{
    unsigned long i;
    unsigned long start;
    /*
     * round down end of usable mem, partially free pages are
     * considered reserved.
     */
    unsigned long sidx;
    unsigned long eidx = (addr + size - bdata->node_boot_start)/PAGE_SIZE;//计算出要释放空间的结束位置相对于该内存节点的起始位置的偏移页数。
    unsigned long end = (addr + size)/PAGE_SIZE;//释放空间最后位置的绝对页号。
    BUG_ON(!size);//如果释放空内存,系统崩溃。
    BUG_ON(end > bdata->node_low_pfn);//不能释放超过本节点范围内的内存空间,否则系统崩溃。
    if (addr < bdata->last_success)
             bdata->last_success = addr;
    /*
     * Round up the beginning of the address.
     */
    start = (addr + PAGE_SIZE-1) / PAGE_SIZE;//这里计算开始地址的全新页,假设addr是在0~4kb的地址范围的话,其实真正在0号页的位置,但是如果通过上面的运算,求出来的就是1号页的位置。为什么这样做呢?因为如果起始地址不是按页对齐的,如果直接释放,就会把前面不属于这个内存node的空间也释放了。
    sidx = start - (bdata->node_boot_start/PAGE_SIZE);//这个就是计算新页和原来的起始地址所在页的偏移页数。
 


相关文档:

linux install 命令

install
1.作用
install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户。
2.格式
(1)install [选项]... 来源 目的地
(2)install [选项]... 来源... 目录
(3)install -d [选项]... 目录...
在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的< ......

Linux中的内存页表创建之memtable_init()函数分析

    本函数的分析很难具体,因为涉及了很多arm的处理器型号和每个型号对应的cache和write buffer的工作方式,这片文章只是做简单的记录,方便以后了解更深后回来再来完善这个函数。
     这个函数的调用过程如:start_kernel()->setup_arch()->paging_init()->memtable_init( ......

Linux命令:lsmod 显示已载入系统的模块

lsmod(list modules)
 
功能说明:显示已载入系统的模块。
语  法:lsmod
补充说明:执行lsmod指令,会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。
范例:
[root@lin ......

linux时钟jiffies及其相关


在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构
struct timeval
{
time_t tv_sec; /***second***/
susecond_t tv_usec;/***microsecond***/
}
到底microsecond是毫秒还是微秒??
1秒=1000毫秒(3个零),1秒=1000 000微秒(6个零),1秒=1 ......

UNIX/linux系统下FTP自动上传文件脚本

方法一: Expect 实现交互
UNIX 窗口中 输入以下命令:
expect ftplinux.txt 10.0.15.22 ftplinux.txt
ftplinux.txt 中内容如下:
--开始-----
spawn ftp [lindex $argv 0]
expect "Name(*):"
send "ftp\r"
expect "Password:*"
send "hell05a\r"
expect "ftp> ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号