Tag: 操作系统

自动/静态内存分配

也许是一个天真的问题,但…… 确认或否认: 自动和静态存储持续时间的对象/变量的内存的存在是在编译时确定的,并且由于没有足够的内存用于自动对象,程序将无法运行时运行。 当然,当自动对象的构造函数执行动态分配并且这样的分配失败时,我们认为这是动态分配的失败,而不是自动的。

在Linux 3.x上挂钩sys_execve()

我试图通过修改系统调用表来挂钩Linux 3.x内核上的sys_execve()函数。 问题是sys_execve()只应在执行失败时返回错误代码。 使用我正在使用的包装器函数(见下文),当在有效的可执行文件上调用sys_execve()时,它执行正常并且一切正常。 但是,当调用不存在的文件或导致错误情况的其他内容时,调用程序将崩溃: segfault at 3b ip 000000000000003b… 使用strace来检查钩子sys_execve()的返回值,显示-1或ENOSYS而不是正确的错误代码,这让我感到困惑,因为我检查了我的包装器函数的程序集以及sys_execve()的Linux源代码。 有关为什么我的包装器没有正确传递错误代码的任何建议? asmlinkage long new_execve(const char* name, const char const** argv, const char const** envp, struct pt_regs* regs) { return orig_func(name, argv, envp, regs); }

没有FPU的处理器中的浮点计算

是否可以在没有浮点单元的嵌入式处理器中执行浮点运算?

可以在没有硬件支持的软件中实现测试和设置吗?

这是用软件编写的测试和设置: boolean TestAndSet(boolean *target) { boolean rv = *target; *target = TRUE; return rv; } 和 do { while(TestAndSetLock(&lock)) ; // do nothing // critical section lock = FALSE; // remainder section } while(TRUE); 我们可以在CPU中使用不支持硬件级别的测试和设置的机制吗? 如果是这样,primefaces性如何得到保证?

自己内核的键盘中断处理程序(C)

我正在写一个小操作系统,作为学校分配的一部分,但我得到了卡住键盘输入(按一个键 – >显示在屏幕上)。 我正在使用osdev.org上的Bare Bones教程(gcc交叉编译器,GRUB引导程序,ld链接器),因为我处于保护模式,所以我不能使用BIOS中断进行输入,这就是为什么我必须编写自己的中断处理程序( ?)但即使在我阅读了一些osdev文章和论坛讨论后,我也不确定该怎么做。 非常类似的问题( http://forum.osdev.org/viewtopic.php?f=1&t=9746 ),除了我不知道如何“设置中断”。 #if !defined(__cplusplus) #include /* C doesn’t have booleans by default. */ #endif #include #include #define INT_DISABLE 0 #define INT_ENABLE 0x200 #define PIC1 0x20 #define PIC2 0xA0 #define ICW1 0x11 #define ICW4 0x01 void outb( unsigned short port, unsigned char val ) { asm volatile(“outb %0, %1” […]

用户和内核模式中的线程

线程在用户模式下运行并在内核模式下运行是什么意思? 这与用户模式的线程执行指令和内核模式的线程执行指令有关吗? 请详细说明。 另外,如果一个线程在用户模式下执行被置于挂起状态,它是否可能开始在内核模式下执行? 如果是的话,怎么可能呢? 到目前为止,我只知道一个线程如果被挂起将完全被SUSPENDED,即上下文切换将由CPU进行以安排另一个线程。

检测内存页面大小

是否有一种可移植的方法来使用C或C ++代码(以编程方式)检测内存页面大小?

CreateProcess方法最终出错

我的以下代码有问题: int main(int argc, char **argv) { PROCESS_INFORMATION pi; STARTUPINFO si; printf(“Process %d reporting for duty\n”,GetCurrentProcessId()); GetStartupInfo(&si); CreateProcess(NULL,”notepad.exe”, NULL,NULL,FALSE,DETACHED_PROCESS, NULL,NULL, &si, &pi); printf(“New Process ID: %d\n”,pi.dwProcessId); return(0); } 并且在运行时,我在调试时运行它并且它在CreateProcess方法上崩溃,并显示以下错误消息: “Tests.exe中0x7c82f29c处的未处理exception:0xC0000005:访问冲突写入位置0x00415760。” 这是什么意思???

零螺纹工艺?

进程是否必须至少包含一个线程? 进程是否可能没有任何线程,或者这没有意义?

共享内存和IPC

我正在阅读有关共享内存的教程,并发现以下语句:“如果进程希望通知另一个进程已将新数据插入共享内存,则必须使用信号,消息队列,管道,套接字或其他IPC的类型。“ 那么使用共享内存和其他类型的IPC仅用于通知而不是使用不需要任何其他IPC类型的IPC(如消息队列和套接字)的主要优点是什么?