小编Alb*_*ert的帖子

IA-32中的段选择器

分段选择器什么时候出现在图片中.英特尔指南中的一行说:

"每个段描述符都有一个关联的段选择器.段选择器提供使用它的软件,其中包含GDT或LDT的索引(其相关段描述符的偏移量),全局/本地标志(确定选择器是否指向GDT或LDT)和访问权限信息."

我没理得.

是否有单独的段选择器寄存器?它是如何计算的?为什么我们需要它.

x86 assembly operating-system

8
推荐指数
2
解决办法
7503
查看次数

软件初始化代码为0xFFFFFFF0H

英特尔表示,复位后处理器处于实模式,软件初始化代码从0xFFFFFFF0H开始.我的问题:

  • 如果处理器处于实模式,它如何访问内存> 1MB(0xFFFFFFF0H)

  • 如何发生这种情况或当RAM <4GB(比如2GB)时会发生什么

  • 如果BIOS映射到0x000FFFFFH,为什么处理器开始在0xFFFFFFF0H执行

请帮我解决这些问题.谢谢.

x86 operating-system bios computer-architecture

6
推荐指数
2
解决办法
2201
查看次数

rmmod时恐慌

你好,我是内核开发新手,

创建了一个简单的程序:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/kthread.h>

MODULE_LICENSE("Dual BSD/GPL");


int messager(void*);
struct task_struct* kthrstr;

static int start_module(void)
{
    printk(KERN_INFO "Loading the messager\n");

    kthrstr = kthread_create(messager,NULL,"MESSAGER");
    wake_up_process(kthrstr);
    return 0;
}

static void stop_module(void)
{
    printk(KERN_INFO "Unloading the messager\n");
    kthread_stop(kthrstr);
}

int messager(void* varg)
{
    daemonize("MESSAGER");
    allow_signal(SIGKILL);

    while(1)
    {   
        printk(KERN_INFO "Timeout: Hello");
        set_current_state(TASK_INTERRUPTIBLE);
        schedule_timeout(10 * HZ);
        if (signal_pending(current))
            break;  
    }
    return 0;
} 

module_init(start_module);
module_exit(stop_module);
Run Code Online (Sandbox Code Playgroud)

模块正确加载,消息也按预期显示在syslog中.但是当使用rmmod卸载模块时,它会发生恐慌,如下所示.请帮助我确定发生了什么错误以及如何纠正:

[ 2207.466086] Timeout: Hello
[ 2215.756784] Unloading the messager
[ 2217.461846] BUG: unable …
Run Code Online (Sandbox Code Playgroud)

linux linux-kernel

5
推荐指数
1
解决办法
2650
查看次数

在schedule()之后恢复线程

另一个新手问题:

在下面的代码中,如果在调用'set_current_state'之后但在调用'schedule'之前线程被抢占了怎么办?再次安排代码时,是否从"schedule"调用开始并从运行队列中删除?或者这次忽略'schedule'调用并从set_current_state(TASK_RUNNING)语句开始?

{
...
set_current_state(TASK_INTERRUPTIBLE); /* suppose thread is preempted just after this function call */
schedule();
set_current_state(TASK_RUNNING);
...
} 
Run Code Online (Sandbox Code Playgroud)

linux-kernel

2
推荐指数
1
解决办法
1262
查看次数