相关疑难解决方法(0)

系统调用如何工作

系统调用如何工作?
系统调用期间会发生什么操作?
有各种各样的系统调用open , read, write, socket等我想知道他们一般如何工作?

c operating-system process system-calls

15
推荐指数
1
解决办法
1万
查看次数

系统调用如何在Linux上实际发生?

灵感来自这个问题

如何强制GDB反汇编?

并与此相关

什么是INT 21h?

如何在Linux下实际发生系统调用?执行调用时会发生什么,直到调用实际的内核例程?

linux internals system-calls linux-kernel

9
推荐指数
2
解决办法
2404
查看次数

任何人都可以理解gettimeofday是如何工作的?

根据此页面,gettimeofday是一个x86-86的系统调用(只需gettimeofday在框中搜索):

int gettimeofday(struct timeval *tv, struct timezone *tz);
Run Code Online (Sandbox Code Playgroud)

我认为迪斯应该很容易,只需准备两个指针并调用相关的syscall.

但它的disas做得更多:

(gdb) disas gettimeofday
Dump of assembler code for function gettimeofday:
0x00000034f408c2d0 <gettimeofday+0>: sub    $0x8,%rsp
0x00000034f408c2d4 <gettimeofday+4>: mov    $0xffffffffff600000,%rax
0x00000034f408c2db <gettimeofday+11>: callq  *%rax
0x00000034f408c2dd <gettimeofday+13>: cmp    $0xfffff001,%eax
0x00000034f408c2e2 <gettimeofday+18>: jae    0x34f408c2e9 <gettimeofday+25>
0x00000034f408c2e4 <gettimeofday+20>: add    $0x8,%rsp
0x00000034f408c2e8 <gettimeofday+24>: retq   
0x00000034f408c2e9 <gettimeofday+25>: mov    0x2c4cb8(%rip),%rcx        # 0x34f4350fa8 <free+3356736>
0x00000034f408c2f0 <gettimeofday+32>: xor    %edx,%edx
0x00000034f408c2f2 <gettimeofday+34>: sub    %rax,%rdx
0x00000034f408c2f5 <gettimeofday+37>: mov    %edx,%fs:(%rcx)
0x00000034f408c2f8 <gettimeofday+40>: or     $0xffffffffffffffff,%rax
0x00000034f408c2fc <gettimeofday+44>: jmp …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 system-calls

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

是否有一个单独的内核级线程来处理用户进程的系统调用?

据我所知,用户级线程是在用户空间中实现的,而内核级线程是在内核空间中实现的。我还读到用户级线程被映射到内核级线程以实际运行用户级线程。

  1. “实施”到底是什么意思?这是否意味着线程控制块分别定义在用户空间和内核空间中?

  2. 当进行系统调用时会发生什么?该系统调用在哪个内核线程(或用户线程 IDK)上运行?每个内核级堆栈都有自己的堆栈吗?

  3. 我知道线程只是进程的一部分。当我们处理内核线程时,这里对应的进程是什么呢?内核进程是什么,你能举个例子吗?

我也参考了其他答案,但没有得到满意的结果。

multithreading operating-system kernel process system-calls

7
推荐指数
1
解决办法
1129
查看次数