首页 › 分类存档 › UC

内核空间页表的建立

页目录表及页表在定义如下:在 http://lxr.linux.no/#linux-bk+v2.6.11.5/include/asm-i386/pgtable.h#L34
extern pgd_t swapper_pg_dir[1024];
extern unsigned long pg0[1024];
其中swapper_pg_dir 为页目录,pg0 为一临时页表。
继续阅读 »

内核空间简单介绍

进程空间总共有4G,其中最高1G的空间(从0xC0000000开始)便是内核空间,剩下是用户空间。虽然内核空间占据了每个虚拟空间中的最高 1G 字节,但映射到物理内存却总是从最低地址(0×00000000)开始,所以内核空间的线性地址与物理地址之间存在一个偏移量0xC0000000,也叫 PAGE_OFFSET。
继续阅读 »

分页机制

段机制实现虚拟地址到线性地址的转换,然而,linux有意的将linux的所有段基址设为0,所以在linux中,线性地址与虚拟地址是相同的,我们以后讨论中,也不对虚拟地址和线性地址进行区分。我们着重学习分页机制,分页机制实现线性地址到物理地址的转换。
继续阅读 »

fork()带来的疑惑

由fork()带来的疑惑促成了我的linux内核之旅
fork()可以创建新进程,新进程是父进程的一个拷贝,这是大家都知道的.
fork()有一些有趣的特点:
继续阅读 »

fork的那些事

历史上的linux 在fork()时完整的复制了父进程的进程空间及相应物理页面,这带来的消耗是可观的,更糟的是,往往程序猿fork()之后紧接着就exec()执行新的程序,刚才复制的东西全白复制了。
为避免做这种无用功,可以使用vfork函数创建,子进程会完全共享父进程的地址空间,包括页表。所以进程写入用户空间的内容同时也写入了子进程的 用户空间,反之亦然。为了避免产生”混乱“,内核将父进程挂起,直到两个进程不再共享它们的用户空间(子进程调用了exec()或exit())。

继续阅读 »

linux下的connect端口扫描程序

linux下的connect端口扫描程序
继续阅读 »

用socket通讯远程执行命令

用socket通讯远程执行命令
继续阅读 »

在一个gdb中同时调试parent与child进程

(gdb) set follow-fork-mode parent/child //设置当fork时直接进入parent还是child调试, 默认为parent

(gdb) set detach-on-fork on/off //设置当fork后, 没有直接进入的进程是attach还是detach, on时将detach, 即不挂其他起程, 默认值为on
  //off: 则fork后的两个进程都要被attach
假入现在进入了child进程
(gdb) info inferiors
  Num  Description       Executable
* 2    process 2550      /home/alex/work/test/test_emacs_gdb_fork
  1    process 2546      /home/alex/work/test/test_emacs_gdb_fork
*指定当前正在调试的进程
(gdb)inferior 2  //inferior inferior_num 将调试控制进入2546进程(父进程)

linux 打造man中文帮助手册图解(man-pages-zh帮助页)

刚学习linux有一份中文帮助手册该是多好事情。linux自带的帮助尽管有多种语言,目前各种发行版的linux基本没有中文帮助手册。打造个 适合自己中文手册还是很有意义的。配置过程其实比较简单,只需要知道中文包,然后放到man可以搜索到的目录中,基本就可以了。

继续阅读 »

网络服务端客户端编程步骤(TCP/UDP)

TCP编程的服务器端一般步骤是:

继续阅读 »