小编bal*_*486的帖子

面向消息的协议和面向流的协议之间的区别

我试图了解这两种计算机网络术语之间的区别.我在互联网上搜索但没有得到一个好主意.有人可以解释一下或给一个解释这个的页面链接吗?谢谢...

network-protocols

33
推荐指数
2
解决办法
3万
查看次数

在linux内核哈希表实现中使用双指针

我试图了解链接列表和哈希表的Linux内核实现.这里是实现的链接.我理解链表实现.但我很困惑为什么在hlist(**pprev)中使用双指针.hlist的链接在这里.我知道hlist用于哈希表的实现,因为列表的头只需要一个指针,它节省了空间.为什么不能使用单个指针(只是*像链表一样)?请帮我.

c linux linux-kernel

19
推荐指数
1
解决办法
6373
查看次数

怀疑可执行和可重定位目标文件

我写了一个简单的Hello World程序.

   #include <stdio.h>
    int main() {
    printf("Hello World");
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

我想了解可重定位目标文件和可执行文件的外观.与main函数对应的目标文件是

0000000000000000 <main>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   bf 00 00 00 00          mov    $0x0,%edi
   9:   b8 00 00 00 00          mov    $0x0,%eax
   e:   e8 00 00 00 00          callq  13 <main+0x13>
  13:   b8 00 00 00 00          mov    $0x0,%eax
  18:   c9                      leaveq 
  19:   c3                      retq 
Run Code Online (Sandbox Code Playgroud)

这里对printf的函数调用是callq 13.我不明白的一件事是为什么它是13.这意味着在地址13调用函数,对吧?13有下一条指令,对吧?请解释一下这是什么意思?

与main对应的可执行代码是

00000000004004cc <main>:
  4004cc:       55                      push   %rbp
  4004cd:       48 89 e5                mov    %rsp,%rbp
  4004d0: …
Run Code Online (Sandbox Code Playgroud)

c executable object-files

7
推荐指数
3
解决办法
2725
查看次数

kvm中超级呼叫的输入在哪里?

我试图了解linux中的virtio机制.我读到kick函数会通知主机端有关新发布的缓冲区.我特别关注virtio_net.一旦数据包准备好传输,就会在这里调用kick函数.从这里我追踪了这个电话,我认为它是这样的.从这里到哪里去了?哪个代码包含virtio的后端驱动程序.管理程序中的代码将在何处进行?谢谢...

谢谢,巴拉

linux kvm linux-kernel

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

如何查找程序使用的系统调用类型

我正在使用x86_64机器.我的linux内核也是64位内核.由于有不同的方法来实现系统调用(int 80,syscall,sysenter),我想知道我的机器正在使用什么类型的系统调用.我是linux的新手.我写了一个演示程序.

#include <stdio.h>
int main()
{
  getpid();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

getpid()进行一次系统调用.任何人都可以给我一个方法来查找我的机器将为此程序使用哪种类型的系统调用..谢谢....

linux system-calls

4
推荐指数
1
解决办法
2883
查看次数

Linux中的系统调用机制存在疑问

我们使用'int'或新的'syscall/sysenter'指令从ring3转到ring0.这是否意味着需要为内核修改的页表和其他内容是由'int'指令自动完成的,或者'int 0x80'的中断处理程序将执行所需的操作并跳转到相应的系统调用.

此外,当从系统调用返回时,我们再次需要转到用户空间.为此,我们需要知道用户空间中的指令地址以继续用户应用程序.存储的地址在哪里.'ret'指令是否会自动将ring从ring3更改为ring0或者这种环更换机制在何处/如何进行?

然后,我读到从ring3变为ring0并不像从ring0变为ring3那样昂贵.为什么会这样?

谢谢,巴拉

linux x86 system-calls

3
推荐指数
1
解决办法
451
查看次数

gcc静态库链接与动态链接

我的构建环境是CentOS 5.我有一个名为libcunit的第三方库.我用autotools安装它,它生成libcunit.alibcunit.so.我有自己的应用程序链接到一堆共享库.libcunit.a位于当前目录中,libcunit.so并且其他共享库位于/usr/local/lib/.当我编译时:

gcc -o test test.c -L. libcunit.a -L/usr/local/lib -labc -lyz
Run Code Online (Sandbox Code Playgroud)

我收到一个链接错误:

libcunit.a(Util.o): In function `CU_trim_left':
Util.c:(.text+0x346): undefined reference to `__ctype_b'
libcunit.a(Util.o): In function `CU_trim_right':
Util.c:(.text+0x3fd): undefined reference to `__ctype_b'
Run Code Online (Sandbox Code Playgroud)

但当我编译时.so喜欢:

gcc -o test test.c -L/usr/local/lib -lcunit -labc -lyz
Run Code Online (Sandbox Code Playgroud)

编译很好,运行也很好.

静态链接时为什么会出错libcunit.a

c linker gcc shared-libraries static-libraries

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

设计模式以确保在方法B之前调用方法A

我有一个示例(不完整)类

class ABC{   
public:      
    void login();      
    void query_users();       
    //other methods  
private:      
    //member data
}
Run Code Online (Sandbox Code Playgroud)

此类的使用方式应首先需要调用登录名,然后才可以调用其他方法(例如query_users等)。登录设置一些私有成员数据供其他方法使用。除了调用检查类中每个其他方法的开始是否设置了成员数据的函数之外,还有其他更简单的方法来实现此目的吗?

oop design-patterns

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

内核如何给出seg.像这样的场景的错误?

我对访问一些无效数据有疑问.操作系统如何导致这样的场景出现分段错误:

假设一块数据长100字节,在4K页面的开头对齐.如果我们访问页面的前100个字节内的有效数据,这将把页面加载到内存中,并将页面表项置于TLB中.如果我们现在尝试访问100和4K之间的一些无效数据,因为条目已经存在于页表中,我们是否可以访问无效数据?

linux segmentation-fault

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