Tag: 操作系统

快速输入输出function

#define getcx getchar_unlocked inline void inp( int &n )//fast input function { n=0; int ch=getcx();int sign=1; while( ch ‘9’ ){if(ch==’-‘)sign=-1; ch=getcx();} while( ch >= ‘0’ && ch <= '9' ) n = (n<<3)+(n<<1) + ch-'0', ch=getcx(); n=n*sign; } 嗨我一直在使用上述函数在各种编码竞赛中输入,但从来没有能够理解为什么它快。 我知道逻辑,但不知道它的坚牢度的概念。 例如,这行是做什么的“#define getcx getchar_unlocked”。 另外我不知道任何快速输出function,所以还有任何快速输出function

内存映射显示的RAM多于实际可用内存

我正在研究一个小的x86内核。 我正在访问并尝试读取GRUB在多引导头中提供的内存映射。 我有一个Intel i3 cpu和4 GiB的RAM。 在这台机器上运行时,我正在阅读以下内存映射: –Base Address– –Length– –Type– 0x0000000000000000 0x000000000009d000 0x1 0x000000000009d000 0x0000000000003000 0x2 0x00000000000e0000 0x0000000000020000 0x2 0x0000000000100000 0x00000000bb53f000 0x1 0x00000000bb63f000 0x0000000000080000 0x2 0x00000000bb6bf000 0x0000000000100000 0x4 0x00000000bb7bf000 0x0000000000040000 0x3 0x00000000bb7ff000 0x0000000000001000 0x1 0x00000000bb800000 0x0000000004800000 0x2 0x00000000e0000000 0x0000000010000000 0x2 0x00000000feb00000 0x0000000000004000 0x2 0x00000000fec00000 0x0000000000001000 0x2 0x00000000fed10000 0x0000000000004000 0x2 0x00000000fed18000 0x0000000000002000 0x2 0x00000000fed1b000 0x0000000000005000 […]

gcc -lpthread不工作

我在我的系统中安装了ubuntu 11。 我有一个使用pthread库的ac程序。 即使我使用标志-lpthread进行编译,我也会收到错误的Undefined reference to sem_wait() 。 例如: gcc -lpthread prog.c 该程序适用于其他ubuntu安装。

执行子进程时,OS在哪里存储argv和argc?

我很难理解操作系统如何将数据从父进程的地址空间传递到子进程的地址空间。 也就是说,在一个C程序中,argc和argv在传入main时存储在哪里? 我理解argv本质上是一个双指针。 我不理解的是操作系统在将它们加载到内核后对这些值的作用。 为子进程创建地址空间后,是否会将这些值推送到新空间的堆栈上? 我们显然不想将指针传递给另一个地址空间。 为了记录,我正在使用MIPS32架构。

获取路由器范围内的设备的MAC地址

路由器是否可以获取未连接到它的附近设备的MAC地址? 我想编写一个应用程序,当某个特定的MAC地址进入我所拥有的路由器范围内时,会以某种方式通知我(电子邮件或其他东西)(该应用程序比这更具体,因此我不能使用预构建的工具但是如果它们是开源的他们可以帮忙)。 路由器将连接到互联网,设备是一个iPhone,所以它一直在寻找WiFi接入点,所以我觉得所有的成分都在那里,但我不知道我问的是否可能。 如果可能(即使只是通过重写路由器操作系统)将采取什么措施? C和我希望的水平一样低……

scanf()如何在操作系统内部工作?

我一直在想如何scanf()/ printf()实际上在硬件和操作系统级别上工作。 数据在哪里流动以及操作系统在这些时间到底做了什么? 操作系统会调用什么? 等等…

“阻止系统调用”是什么意思?

“阻止系统调用”是什么意思? 在我的操作系统课程中,我们正在研究multithreading编程。 我不确定当我在我的教科书中阅读时它是什么意思“它可以允许另一个线程在线程进行阻塞系统调用时运行”

在程序集中完全编写操作系统有什么好处?

MenuetOS是完全用Assembly编写的操作系统的一个例子。 在Assembly中编写它而不是像C这样的低级编程语言有什么好处吗?

如何使用内核创建可启动CD映像?

我有一个内核,要启动我正在使用命令qemu-system-i386 -kernel kernel.bin 。 有没有办法用qemu-system-i386 -cdrom CD.iso创建可引导的磁盘映像? 我在linux中用这些命令编译的代码: nasm -f elf32 kernel.asm -o kernelasm.o gcc -m32 -c kernel.c -o kernelc.o ld -m elf_i386 -T link.ld -o kernel.bin kernelasm.o kernelc.o 然后使用qemu-system-i386 -kernel kernel.bin 代码:kernel.asm: [BITS 32] SECTION .text align 4 dd 0x1BADB002 dd 0x00 dd – (0x1BADB002 + 0x00) global start global keyboard_handler global read_port global […]

什么是内核线程?

我刚刚开始编写设备驱动程序和新线程,编写了很多文档来了解线程。 我还有一些疑惑。 什么是内核线程? 它与用户线程有何不同? 两个线程之间的关系是什么? 我该如何实现内核线程? 我在哪里可以看到实现的输出? 谁能帮我 ?。 谢谢。