- 论坛徽章:
- 0
|
原帖由 accessory 于 2009-12-19 01:49 发表 ![]()
1,你说的那个地址在原书中哪里?怎么写的?
看上去应该是物理地址.
2. 所有进程共享1G 内核空间 和每个进程一个内核栈并不矛盾. 在某一个时刻,只有一个当前进程在执行. 其他的都在休息或等待. 在这个时刻,这个 ...
1.那个地址在3.2.2.1节
2.是不是这样理解的?
页目录中属于用户态空间的映射方式是不固定的,所以不同进程中的同一个线性地址(页目录前3/4目录项所覆盖区域)指向的物理内存地址不一定相同。
但是页目录中属于内核态空间的映射方式是固定的,不同进程的同一个线性地址(页目录最后1/4目录项所覆盖区域)指向的必然是相同的物理地址,
所以内核态的1G空间是共享的。
这个内核态堆栈的SP是不是这个结构体中的esp0,因为有自己内核态堆栈的话,我觉得从内核态切换到用户态的时候必须保存相应的SP:
- struct thread_struct {
- /* cached TLS descriptors. */
- struct desc_struct tls_array[GDT_ENTRY_TLS_ENTRIES];
- unsigned long esp0;
- unsigned long sysenter_cs;
- unsigned long eip;
- unsigned long esp;
- unsigned long fs;
- unsigned long gs;
- /* Hardware debugging registers */
- unsigned long debugreg[8]; /* %%db0-7 debug registers */
- /* fault info */
- unsigned long cr2, trap_no, error_code;
- /* floating point info */
- union i387_union i387;
- /* virtual 86 mode info */
- struct vm86_struct __user * vm86_info;
- unsigned long screen_bitmap;
- unsigned long v86flags, v86mask, saved_esp0;
- unsigned int saved_fs, saved_gs;
- /* IO permissions */
- unsigned long *io_bitmap_ptr;
- /* max allowed port in the bitmap, in bytes: */
- unsigned long io_bitmap_max;
- };
复制代码
[ 本帖最后由 wliang511 于 2009-12-19 13:02 编辑 ] |
|