免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库

动态

2014-09-20

2014-09-03

  • stuman 发表了新话题 2014-09-03 19:18
    用户栈的扩展与线性映射
    当用户栈超出边界时会发生缺页异常,第一步会向下扩展栈的低端地址,将低端地址置为缺页异常发生时的address,然后再次缺页异常,进行请求调页。问题在于这个新分 ...

2014-08-16

  • stuman 发表了新话题 2014-08-16 20:49
    关于mmap
    使用mmap映射文件,是不是只能修改文件中原有内容,而无法在文件里添加新数据,也就是不能改变文件原来的大小?

2014-08-06

  • stuman 发表了新话题 2014-08-06 20:30
    虚拟机上如何测试SCSI驱动?
    我在vmware里装了linux,我想用模块编写一个SCSI驱动,那么如何测试这个驱动呢?关键要有一个虚拟的SCSI硬盘,我看vmware可以添加一个虚拟硬盘,但是如何将它与自 ...

2014-08-03

  • stuman 发表了新话题 2014-08-03 17:39
    ext2文件系统的组描述符
    书上说只有块组0中包含的超级块和组描述符才由内核使用,其余块中组描述符保持不变。 但是我觉得对磁盘进行了一些文件读写后,组描述符应该是变化的,比如有个字 ...

2014-08-01

2014-07-16

  • stuman 发表了新话题 2014-07-16 21:03
    求推荐个项目,增加经验
    学习linux内核与驱动一年多了,之前几乎毫无编程经验,凭着兴趣坚持了下来。目前只编写了个键盘跟踪程序,可以记录系统内的所有按键。在论坛里看个公司招人,发简 ...

2014-07-06

  • stuman 发表了新话题 2014-07-06 18:52
    模块编译的makefile
    当执行make命令时,会执行makefile的第一个规则,如果第一个规则依赖于下面的规则,那么会执行其余的规则。但是这里depend .depend dep代表的规则没有放入前面的 ...

2014-07-05

  • stuman 发表了新话题 2014-07-05 18:43
    LDD中的pool
    以上是LDD中poll的代码。按照书上的说法,当没有文件描述符可执行I/O操作时,调用poll的进程就会睡眠。但是这里使用poll_wait添加了两个等待队列,一个用于读一个 ...

2014-06-25

  • stuman 发表了新话题 2014-06-25 19:21
    中断与tasklet需要同步吗
    我编写了一个程序,在键盘中断时将扫描码放入缓冲区,同时增加缓冲区使用空间计数count,然后激活tasklet,tasklet从缓冲区中读取数据,并减少count,那么键盘中 ...

2014-06-22

  • stuman 发表了新话题 2014-06-22 14:30
    LDD3中的错误
    在第6章高级字符驱动程序中的scull_p_write函数中,如果缓冲区中没有空间可写入数据时,写操作将被阻塞,获取剩余空间的函数为: static int spacefree(struct ...

2014-06-11

  • stuman 发表了新话题 2014-06-11 20:37
    超级块的根节点的dentry来自哪里?
    内存中的超级块中含有其所在文件系统的根节点的dentry,但是我查看ext2里磁盘上的超级块,却找不到根节点的dentry,请问这个dentry来自哪里呢?

2014-06-01

  • stuman 发表了新话题 2014-06-01 15:33
    如何确知子进程已退出
    我用fock创建一个子进程,然后在子进程中调用exit,让子进程退出,有什么办法在子进程退出时打印一个信息,用以确定子进程已退出?如果exit中带有返回值,那么我 ...

2014-05-30

  • stuman 发表了新话题 2014-05-30 18:19
    内核态下能直接调用用户态函数吗
    在信号处理中,如果要调用自定义的信号处理函数,linux的方式是把处理函数的地址及参数拷入用户栈,然后等进程返回用户态后执行信号处理函数。那么如果直接在内核 ...

2014-05-28

2014-05-23

  • stuman 发表了新话题 2014-05-23 23:43
    ELF文件格式
    我看到一本书上说elf header位与elf文件的开头,但是program header里的offset值为0,也就是说该段的第一个字节在elf文件中的偏移为0,那么elf header与程序段不 ...

2014-05-18

  • stuman 发表了新话题 2014-05-18 15:34
    lock前缀
    LOCK "decl %0; sete %1" 上面代码是个内联汇编,请问lock对后面的两个指令都有效还是只对第一个指令有效?

2014-05-14

  • stuman 发表了新话题 2014-05-14 19:43
    对于一个文本编辑程序是如何调度的
    假设有一文本编辑程序,那么当在长时间无输入后,它将被调度出去,那么这里的调度是在编辑程序耗尽了时间片后,设置了TIF_NEED_RESCHED标志,然后被调度出去,还 ...

2014-05-10

  • stuman 发表了新话题 2014-05-10 18:43
    开中断情况下如何避免调度?
    中断处理程序是不能调度的。紧急的中断处理程序是在关中断情况下执行的,所以不会调度。而非紧急操作是在开中断情况下执行的,那么这里是如何避免调度的呢?

2014-05-02

2014-04-29

  • stuman 发表了新话题 2014-04-29 18:07
    如何跳入保护模式
    ; 初始化 32 位代码段描述符 xor eax, eax mov ax, cs shl eax, 4 add eax, LABEL_SEG_CODE32 mov word [LABEL_DESC_CODE32 + 2], ax shr eax, 16 ...

2014-04-25

  • stuman 发表了新话题 2014-04-25 21:01
    gcc中调用nasm
    bar.cfoo.asm编译命令如下: gcc -c bar.c nasm -f elf foo.asm gcc -o foobar bar.o foo.o 出错信息: bar.o: In function `main': bar.c.text+0x12 ...

2014-04-20

  • stuman 发表了新话题 2014-04-20 14:09
    页框的写保护
    ULK中有一句话:只要相应的页不是由多个进程所共享,那么,这种页框都是写保护的。 我觉得这句话是错的,应该把不是共享改为“是共享”。假设某个进程用了个非共 ...

2014-04-19

  • stuman 发表了新话题 2014-04-19 17:36
    如何对中断处理函数进行线性映射?
    用户态的程序通过中断进入内核态后会执行中断处理函数,那么中断处理函数的线性地址如何转换成物理地址呢? 我在缺页异常中找到如上程序,看程序似乎是把主内核 ...

2014-04-11

  • stuman 发表了新话题 2014-04-11 20:15
    真诚求教,学了内核后,该学些什么
    学了点内核,感觉一大半是内存管理,然后是一点进程管理,其他都是些佐料。我觉得凭这个找工作有点难,还应该学点什么呢?TCP/IP协议还是驱动?或者其他什么?

2014-04-09

  • stuman 发表了新话题 2014-04-09 19:22
    进程调度时通用寄存器需要保存吗
    用户态进程当中断发生时,会保存各种寄存器的值。进程调度发生在内核态,为什么我找不到对当前进程内核态各种通用寄存器(如eax,ebx)值的保存呢?这些寄存器不 ...

2014-04-06

  • stuman 发表了新话题 2014-04-06 14:53
    slab着色
    书上原文:在不同的slab 内具有相同偏移量的对象最终很可能映射在同一高速缓存行中。高速缓存的硬件可能因此而花费内存周期在同一高速缓存行与RAM 内存单元之间来 ...

2014-03-30

  • stuman 发表了新话题 2014-03-30 12:50
    lock指令的范围
    lcok指令可实现原子操作,那么它的有效范围是什么呢?上面代码中lock对decl与sete都有效吗?如果在"decl %0; sete %1"之后又加了个"某指令",那么后面的指令 ...

2014-03-19

2014-03-15

  • stuman 发表了新话题 2014-03-15 13:36
    进程调度过程中是否涉及模式切换
    一个进程正在运行,然后被调度,另一个进程被执行,此过程中是否出现用户态与内核态的转换?如果有的话,发生在什么时候? 假设没有发生与调度无关的中断

2014-03-12

2014-03-09

  • stuman 发表了新话题 2014-03-09 15:31
    中断嵌套
    发生中断嵌套时,中断不停发生,cpu不停的执行中断处理程序,由此而无法回到被中断的那个进程。 请问如何避免这个情况?

2014-03-07

  • stuman 发表了新话题 2014-03-07 20:39
    tss中的esp0
    中断发生时,cpu会自动到tss里的esp0获取内核栈。我本以为这里的esp0会预先设置一个值,这个值就是一个地址,指示着内核栈的开始处。但是我在《自己动手写操作系 ...

2014-02-16

2014-02-15

  • stuman 发表了新话题 2014-02-15 14:04
    硬盘和软盘的磁道
    硬盘的磁道是一个个的同心圆,所以外侧磁道比内侧磁道大,所分的扇区也就多。但是我在书上看到软盘每磁道的扇区数好像是一样的,请问软盘的磁道是怎么分的呢?

2014-02-13

2014-02-12

  • stuman 发表了新话题 2014-02-12 13:38
    一直没弄明白分页机制
    linux的分页机制可以将用户空间相同的线性地址映射到不同的物理地址,要实现这种功能总要有改变页目录表,页表之类里面的表项吧。但是我感觉这些表项在初始化时就 ...

2014-01-02

2013-12-31

2013-12-29

2013-12-28

2013-12-24

  • stuman 发表了新话题 2013-12-24 13:31
    阅读了内核后如何提高?
    学了内核半年,大体上看完了《深入理解linux内核》,现在想学点linux下的实际编程,有什么比较成熟点的开源项目或源码剖析的书呢?

2013-12-18

  • stuman 发表了新话题 2013-12-18 12:39
    大端小端问题
    《情景分析》上说i386采用小端方式,所以对于数字0x1234将存为0x3412,但是我在网上查资料,小端应该是低位数存在低字节,那应该是0x1234呀,请问书上是不是错了 ...

2013-12-14

  • stuman 发表了新话题 2013-12-14 19:54
    如何用printk显示内核信息?
    我在内核中使用printk,但是无法在终端打印信息。将printk等级设置为最高也没用,在字符模式下也没用。如果查看日志文件,里面的信息太多,完全没价值。 我使用 ...

2013-12-13

2013-12-12

  • stuman 发表了新话题 2013-12-12 21:58
    linux编译问题
    make headers_install时出现以下错误: CHK include/linux/version.h make: unifdef: Command not found make: *** [headers_install] Error 127 似 ...
  • stuman 发表了新话题 2013-12-12 12:41
    如何调试内核
    如果我想跟踪cd命令之后内核的执行过程,应该怎么调试呢?

2013-12-11

  • stuman 发表了新话题 2013-12-11 19:31
    fs_struct结构
    struct fs_struct { atomic_t count; rwlock_t lock; int umask; struct dentry *root,*pwd,*altroot; struct vfsmount *rootmnt,*pwdmnt,*altrootmn ...
  • stuman 发表了新话题 2013-12-11 13:24
    follow_dotdot函数
    现在假设原文件系统中有一目录a,其下有目录b,此时有一软盘,其中仅有一个目录c。那么把软盘挂载到目录b下,此时就有路径:a/b/c,当处于目录c中时,输入命令cd ...

2013-12-04

  • stuman 发表了新话题 2013-12-04 18:24
    文件的父目录
    如果目录a中有目录b,目录b中有一个文件,那么这个文件的父目录是a还是b呢?

2013-12-01

  • stuman 发表了新话题 2013-12-01 18:58
    内联汇编
    以上是一个内联汇编代码,有的代码后面加了\n\t,有的只有\n,有的只有\t,请问这3种分别表示什么意思呢?分别在什么场合下使用呢?

2013-11-27

  • stuman 发表了新话题 2013-11-27 20:30
    schedule如何将新程序运行?
    schedule如何将新程序运行? 书上说在switch_to宏后,新进程并不立即执行。我在schedule的后面找到一行代码: prev=current 这行代码将prev置为了新进程,那么 ...
  • stuman 发表了新话题 2013-11-27 14:10
    switch_to宏中两个标记1是否一样
    switch_to宏中两个标记1是否一样 在《深入理解linux内核》中讲解switch_to宏时讲到: 6.把next->thread.eip(通常是一个标记为1的地址)压入next的内核栈 7.j ...

2013-11-26

  • stuman 发表了新话题 2013-11-26 18:49
    内联汇编中的数字
    asm volatile("pushfl\n\t" \ "pushl %%ebp\n\t" \ "movl %%esp,%0\n\t" /* save ESP */ \ "movl %5,%%esp\ ...

2013-11-25

  • stuman 发表了新话题 2013-11-25 19:24
    进程抢占
    书上说进程在他的时间片到期时也可以被抢占,但是时间片到期时本身就要进程调度,这里是不是应该改为时间片未到期呀?
  • stuman 发表了新话题 2013-11-25 19:19
    中断嵌套
    书上说中断嵌套时,中断处理程序不能被阻塞,但是当中断处理程序1被中断2嵌套,cpu会执行中断2的处理程序,那么中断1的处理程序不就被阻塞了吗?

2013-11-23

2013-11-19

  • stuman 发表了新话题 2013-11-19 22:06
    指针传值
    ypedef struct s_proc { STACK_FRAME regs; t_16 ldt_sel; DESCRIPTOR ldts[LDT_SIZE]; t_32 pid; char p_name[16]; }PROCESS; 有以上结构体,现有指针p_ ...

2013-11-18

2013-11-08

  • stuman 发表了新话题 2013-11-08 20:09
    分页机制如何起作用?
    我看内核中的代码定义变量,调用函数时和平时写的代码也没区别呀,那么分页机制究竟如何起作用的呢? 如果给我一个线性地址,我也知道如何映射为物理地址,但是 ...

2013-11-05

  • stuman 发表了新话题 2013-11-05 21:45
    如何向cr3寄存器传值
    我看到代码: mov eax, PageDirBase mov cr3, eax 请问向cr3传值是不是必须先把值放入普通寄存器,然后再由普通寄存器传入cr3? 也就是mov cr3, PageDirBase ...
  • stuman 发表了新话题 2013-11-05 12:39
    寻用masm写的操作系统源码
    前段时间我在网上看到一个用masm改写的orange's的源码,当时没有下载,现在想阅读阅读,知道的人请给个下载链接吧。谢谢

2013-11-04

  • stuman 发表了新话题 2013-11-04 14:07
    中断与进程调度
    当敲击键盘上某个按键,就会产生键盘中断,然后就会有相应的中断处理函数被调用,那么在调用这个处理函数之前,是否进行了进程调度呢?这个处理函数是不是被调度 ...

2013-10-28

2013-10-16

  • stuman 发表了新话题 2013-10-16 14:30
    想找个单位实习
    本人体制内,想去做码农,但父母有点反对,所以我想先找个单位实习一下,报酬上给个午餐费就行。本人水平仅限于阅读完《深入理解linux内核》,年龄31,本科,北京 ...

2013-10-15

  • stuman 发表了新话题 2013-10-15 18:30
    大家给我点建议吧
    我31岁了,工作和编程无关,但是我比较喜欢编程。目前已阅读《linux0.11内核完全注释》,《深入linux内核》,几乎没有项目经验。大家觉得我应该再学点其他的(比 ...

2013-10-11

  • stuman 发表了新话题 2013-10-11 18:26
    关于锁的应用
    1.如果有某临界区,假设为结构体变量A,此时有进程P要对A进行操作,此时进程P首先要获取锁。那么这个锁是否在结构体A中定义呢?而获取锁的操作是不是在进程A中进 ...

2013-10-07

  • stuman 发表了新话题 2013-10-07 19:48
    系统调用号如何传入
    我们知道系统调用使用指令int 0x80,系统调用号通过eax寄存器传入,那么再使用int指令时,系统调用号是通过汇编指令手动的放入eax中吗?也就是说使用int前使用mo ...

2013-09-27

  • stuman 发表了新话题 2013-09-27 12:33
    汇编LOCK
    以上代码用于释放信号量,请问其中的LOCK是什么?是一个汇编命令吗?为什么不给它加引号呢?

2013-09-23

2013-09-21

  • stuman 发表了新话题 2013-09-21 18:39
    不在主存中的页
    1.如果页表项的present标志为0,那么这一页不在主存中。那么这一页应该在哪呢?是根本不存在还是被交换到硬盘上? 2.请求调页技术将页框的分配推迟到进程要访 ...
  • stuman 发表了新话题 2013-09-21 16:45
    pud_alloc返回值
    pud = pud_alloc(mm, pgd, address); 书上说pud_alloc函数创建一个页上级目录,并把它的物理地址写入内核页全局目录的合适表项。那么它的返回值是什么呢?

2013-09-20

  • stuman 发表了新话题 2013-09-20 18:20
    缺页处理
    if (in_atomic( ) || !tsk->mm) goto bad_area_nosemaphore; 以上代码如果是内核线程,则进入bad_area_nosemaphore,但是图中显示不是内核态才会进入bad_a ...

2013-09-17

  • stuman 发表了新话题 2013-09-17 13:41
    不等号!= 的使用
    write = (vma->vm_flags & VM_WRITE) != 0; 请问这段代码什么意思呀?不等号!= 只有在条件测试时才会用呀,这里怎么用来赋值了?

2013-09-16

  • stuman 发表了新话题 2013-09-16 13:20
    查找一个空闲的地址区间
    函数arch_get_unmapped_area()用于查找一个空闲的地址区间,其中有如下代码: vma = find_vma(current->mm, addr);//参数addr表示从哪个地址开始查找 if (!v ...

2013-09-10

2013-09-04

  • stuman 发表了新话题 2013-09-04 13:59
    大于TASK_SIZE的线性映射
    书上说大于TASK_SIZE(即PAGE_OFFSET,0xc0000000)线性地址的相应页表项都应该总是相同的。 一个页表项对应的页框大小为4k,或2M,或4M,也就是说这些相同的页表 ...

2013-09-02

  • stuman 发表了新话题 2013-09-02 20:06
    关于PAGE_OFFSET
    1.大于TASK_SIZE(即PAGE_OFFSET,0xc0000000)线性地址的相应页表项都应该总是相同的,这是什么原因呢? 2.内核空间的物理地址为线性地址减去0xc0000000,这 ...
  • stuman 发表了新话题 2013-09-02 20:01
    pud_alloc函数
    pud_t *pud = pud_alloc(&init_mm, pgd, address); 上面代码中参数pgd,address都是线性地址,函数pud_alloc应该是设置全局目录中某一项,全局目录项中存放的是 ...

2013-08-29

  • stuman 发表了新话题 2013-08-29 18:52
    高速缓存与slab
    高速缓存被划分为多个slab,为slab分配页框的函数为alloc_pages,但是这个函数分配页框时好像也并没有特别的指定是从高速缓存中分配的,但是按照道理应该是从高速 ...
  • stuman 发表了新话题 2013-08-29 18:41
    硬件高速缓存与普通和专用高速缓存是一回事吗
    ULK第二章讲了硬件高速缓存,第八章又讲了高速缓存可分为普通和专用高速缓存,这两个高速缓存是一回事吗?

2013-08-28

  • stuman 发表了新话题 2013-08-28 20:47
    线性映射
    页全局目录存放在变量swapper_pg_dir中,在设置页全局目录表时,首先将swapper_pg_dir的物理地址写入cr3,那么当寻找某个线性地址对应的物理地址时,首先要通过c ...
  • stuman 发表了新话题 2013-08-28 20:07
    pud_alloc返回值
    pud_t *pud = pud_alloc(&init_mm, pgd, address); 请问此函数返回值是上级目录某项的地址吗?如果是的话,这个地址是线性地址还是物理地址?

2013-08-26

  • stuman 发表了新话题 2013-08-26 19:18
    还是slab对象分配cache_alloc_refill()函数
    cache_alloc_refill()函数重新填充本地高速缓存并获得一个空闲对象。其中有如下代码: 对于slab 中的每个空闲对象,函数增加slab 描述符的inuse字段,将对象的 ...
  • stuman 发表了新话题 2013-08-26 12:42
    slab对象分配cache_alloc_refill()函数
    cache_alloc_refill()函数重新填充本地高速缓存并获得一个空闲对象。其中有如下代码: 对于slab 中的每个空闲对象,函数增加slab 描述符的inuse字段,将对象的 ...

2013-08-25

2013-08-24

  • stuman 发表了新话题 2013-08-24 22:00
    外部slab描述符存放处
    外部slab描述符——存放在slab外部,位于cache_sizes指向的一个不适合ISA DMA的普通高速缓存中。 以上是说slab描述符存放位置,但是我觉得这里的cache_sizes是 ...

2013-08-21

2013-08-16

  • stuman 发表了新话题 2013-08-16 19:16
    伙伴系统分配块
    利用伙伴系统算法分配大小为2^order的空闲页块,分配后需要减少free_pages值,也就是减少空闲页面数,书上代码为zone->free_pages -= 1UL

2013-08-15

  • stuman 发表了新话题 2013-08-15 19:52
    临时内核映射kmap_atomic
    以上是临时内核映射的代码,我的问题是变量kmap_pte是什么?代码vaddr = fix_to_virt(FIX_KMAP_BEGIN + idx);得 到的值是什么?为什么设置pte表项的值与vaddr ...

2013-08-14

  • stuman 发表了新话题 2013-08-14 20:29
    什么是固定映射
    每个固定映射的线性地址都由定义于enum fixed_addresses数据结构中的整型索引来表示: enum fixed_addresses { FIX_HOLE, FIX_VSYSCALL, FIX_APIC_BASE, FI ...

2013-08-12