Articles of 操作系统

在创build新的systemd服务时,RemainAfterExit选项何时应该设置为true?

我正在尝试写几个服务。 他们中的一些人已经把'type'选项设置为oneshot。 但是当“RemainAfterExit”选项需要设置为true时,我仍然感到困惑。 (不仅仅是该服务即使在退出之后也需要被激活)。

总线错误打开和mmap的文件

我想创build一个文件并将其映射到内存中。 我认为我的代码将工作,但是当我运行它时,我得到一个“总线错误”。 我search谷歌,但我不知道如何解决这个问题。 这是我的代码: #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <errno.h> #include <sys/types.h> #include <unistd.h> #include <sys/mman.h> #include <string.h> int main(void) { int file_fd,page_size; char buffer[10]="perfect"; char *map; file_fd=open("/tmp/test.txt",O_RDWR | O_CREAT | O_TRUNC ,(mode_t)0600); if(file_fd == -1) { perror("open"); return 2; } page_size = getpagesize(); map = mmap(0,page_size,PROT_READ | PROT_WRITE,MAP_SHARED,file_fd,page_size); if(map == MAP_FAILED) { […]

如何在进程结束后自动closures`qemu`的执行?

我希望打开和显示输出后的qemu窗口在运行pintOS后自动closures 就像我运行命令pintos — run alarm-multiple在tcsh shell中pintos — run alarm-multiple ,qemu显示进程开始 ,然后一些alarm-notifications ,然后进程结束 ,但之后,qemu窗口将不会closures 我想成功完成系统调用后退出窗口。

调用execv()时dynamic分配内存会发生什么?

我正在编写一个简单的shell作为一个操作系统课程的任务,我需要在PATH中search,以find程序用户input,一旦我find正确的目录,我malloc一块内存只是足以容纳目录名加上程序名,我把它作为第一个parameter passing给execv()。 我可以静态分配100个左右的字符,但有一个限制让我感到不舒服。 所以当execv()执行时,堆是被清理还是丢失了那块内存? 这可能不是很多的记忆,但我只是好奇。

查找地址属于哪个页面

我可以在内存中轻松地find一个缓冲区的地址,如下所示: int main() { char buffer[100]; printf("%p\n, buffer); } 有什么办法可以打印出缓冲区所属页面的地址吗? [编辑]我在一台Linux机器上,确切地说是Ubuntu。 我很好奇32和64位版本。

一个过程组必须有一个正在运行的领导过程?

在类Unix操作系统中,如果一个进程的pid和它的pgid是相等的,那么这个进程是一个进程组的领导者。 但是,如果stream程负责人已经退出,并且同一组中的其他stream程仍在运行,那么成功的领导者stream程是谁?

如何获得每个进程的准确CPU使用率和进程空闲CPU时间

我一直在努力获得准确的CPU使用每个进程和进程空闲CPU时间..我试着“顶部”命令proc / [pid] / stat文件夹,但仍然试图我的运气.. TOP命令为fg(前台)和bg(后台)中运行的所有进程提供了CPU使用情况,但是它不是那么准确,因为它显示%CPU 0,即使进程在后台运行..任何其他办法? 请帮忙

读取GDB寄存器指向的内存

如果知道内存位置,有没有办法从GDB查看内存内容? 那是我正在debugging我为我的操作系统课程编写的x86汇编程序。 我正在尝试做的是用C和gas(GNU汇编器)在x86上编写用于Linux的用户级线程库。 我分配了自己的堆栈,并将esp寄存器指向了该内存位置。 现在我想要做的是读取内存,看看我分配的堆栈里有什么。

mmap是否与所有进程共享内存?

当我这样做: myProgram.h myProgram.c struct PipeShm { // all my fields // more // … }; struct PipeShm myPipe = { /* initialization for all fields */ }; struct PipeShm * sharedPipe = &myPipe; void func() { sharedPipe = mmap (NULL, sizeof * sharedPipe, PROT_READ | PROT_WRITE,MAP_SHARED | MAP_ANONYMOUS, -1, 0); } 当我mmap指针sharedPipe ,如果我从main()从myProgram代码调用任何方法,所有进程将共享共享与myPipe结构共享的内存? 或者每个新创build的孩子都会拥有一个新的myPipe ? […]

中断上下文中的页面错误

在中断处理程序/primefaces上下文中是否可以发生页面错误?