操作系统理论¶
线程独占的资源有哪些?¶
-
线程栈:每个线程都有其自己的调用栈。这个栈保存了函数调用的历史、局部变量、返回地址等信息。
-
线程局部存储(Thread Local Storage, TLS):这是一种机制,允许每个线程拥有其自己的数据实例,即使该数据是静态存储期或全局的。在C++11及更高版本中,可以使用
thread_local关键字来声明线程局部变量。 -
寄存器内容:一些寄存器,如程序计数器、栈指针等,都是线程特有的。
-
线程的优先级和调度信息:这些信息由操作系统维护,用于决定线程的执行顺序。
-
线程的特定属性:例如线程ID、线程的状态(运行、就绪、阻塞等)。
-
线程的信号掩码:在某些操作系统(如Unix-like系统)中,线程可以有其自己的信号掩码,决定哪些信号可以递送给它。
-
线程的错误状态:某些库函数,如
errno在POSIX系统中,可能为每个线程提供独立的错误状态。
CPU 是如何将虚拟地址翻译成物理地址的?¶
内容较长,建议直接查看文章:https://zhuanlan.zhihu.com/p/636718404
Linux 系统如何使用共享内存?有哪些方式?¶
在 Linux 中,共享内存是进程间通信 (IPC) 的一种机制,允许两个或更多进程访问同一块内存空间。以下是使用共享内存的几种方式:
-
System V 共享内存:
- System V IPC 机制提供了一个传统的共享内存解决方案。使用
shmget(),shmat(),shmdt(), 和shmctl()这些函数可以创建、附加、分离和控制共享内存段。 - 示例:
- System V IPC 机制提供了一个传统的共享内存解决方案。使用
-
POSIX 共享内存:
- POSIX 提供了另一种方式来创建共享内存,通常使用在
/dev/shm虚拟文件系统上的文件。 - 使用
shm_open(),ftruncate(), 和mmap()可以创建和映射共享内存。 - 示例:
- POSIX 提供了另一种方式来创建共享内存,通常使用在
-
共享内存对象:
- 这主要与 C++ 相关,Boost 和其他第三方库提供了更高级的、封装好的共享内存解决方案。