2K+ 次浏览
上下文切换涉及存储进程或线程的上下文或状态,以便在需要时可以重新加载它,并且可以从与之前相同的点恢复执行。这是多任务操作系统的功能,允许单个 CPU 由多个进程共享。内核在内核级线程之间进行上下文切换时采取的操作是:内核线程之间的上下文切换通常需要保存要切换出的线程的 CPU 寄存器的值,并恢复要调度的新的线程的 CPU 寄存器。
8K+ 次浏览
内核在进程之间进行上下文切换时采取的操作包括:操作系统必须保存当前正在执行进程的 PC 和用户堆栈指针,以响应时钟中断并将控制权转移到内核时钟中断处理程序。时钟中断处理程序将保存其余寄存器以及其他机器状态(例如浮点寄存器的状态)到进程 PCB 中。操作系统调用调度程序来确定下一个要执行的进程。然后,操作系统从其 PCB 中检索下一个进程的状态并恢复寄存器…… 阅读更多
高级本地过程调用 (ALPC) 是一种消息传递机制。服务器进程发布全局可见的连接端口对象。当客户端需要子系统或服务的服务时,它会打开服务器连接端口对象的句柄并向端口发送连接请求。服务器创建通道并返回一个句柄给客户端。该通道由一对专用通信端口组成:一个用于客户端到服务器的消息,另一个用于服务器到客户端的消息。通信通道支持回调机制,因此客户端和服务器可以在通常预期的情况下接受请求…… 阅读更多
远程过程调用 (RPC) 是一种客户端-服务器机制,它使一台机器上的应用程序能够对另一台机器上的代码进行过程调用。客户端调用本地过程(一个存根例程),该例程将参数打包到消息中并将其发送到网络上的特定服务器进程。然后,客户端存根例程阻塞。同时,服务器解包消息,调用过程,将返回结果打包到消息中,并将其发送回客户端存根。客户端存根取消阻塞,接收消息,解包 RPC 的结果,并将它们返回给调用者。这…… 阅读更多
1K+ 次浏览
上下文切换涉及存储方法或线程的上下文或状态,以便在需要时可以重新加载它,并且可以从与之前相同的点恢复执行。这可能是多任务软件系统的一个特性,并允许单个计算机硬件由多个进程共享。当发生中断时,硬件会自动切换一部分上下文。处理程序可能会保存更多上下文,具体取决于实际硬件和软件设计的细节。通常,只修改上下文的最小部分以减少数量…… 阅读更多
242 次浏览
定义Microsoft 接口定义语言 (MIDL) 定义客户端和服务器程序之间的接口。Platform Software Development Kit (SDK) 中包含的 MIDL 编译器使开发人员能够创建远程过程调用 (RPC) 接口和 COM/DCOM 接口所需的接口定义语言 (IDL) 文件和应用程序配置文件 (ACF)。MIDL 还支持为 OLE 自动化生成类型库。应用程序MIDL 可用于基于 Windows 操作系统的所有客户端/服务器应用程序。MIDL 还可用于为包含 Unix 和 Apple 等操作系统的异构网络环境创建客户端和服务器程序…… 阅读更多
16K+ 次浏览
并非所有计算机都以相同的顺序存储构成多字节值的字节。考虑一个由 2 个字节组成的 16 位整数。存储此值的两种方法:小端序 - 在此方案中,低位字节存储在起始地址 (A) 上,高位字节存储在下一个地址 (A + 1) 上。大端序 - 在此方案中,高位字节存储在起始地址 (A) 上,低位字节存储在下一个地址 (A + 1) 上。为了允许具有不同字节顺序约定机器相互通信,Internet 协议…… 阅读更多
4K+ 次浏览
加载到内存中并正在执行的程序称为进程。简单来说,进程是正在执行的程序。当创建程序时,它只是一些存储在硬盘上的作为被动实体的字节。然后,程序开始加载到内存中并成为一个活动实体,当在 Windows 中双击程序或在命令行中输入可执行文件的名称时。(即 a.out 或 prog.exe)让我们看看每个内存段以及进程在内存中是什么样的:图:内存中的进程文本一个进程不仅仅是…… 阅读更多
6K+ 次浏览
在使用互斥锁的多线程 Pthread 程序中可能会发生死锁。让我们看看它是如何发生的。未锁定的互斥锁由 pthread_mutex_init() 函数初始化。使用 pthread_mutex_lock() 和 pthread_mutex_unlock() 获取和释放互斥锁。如果线程尝试获取锁定的互斥锁,则对 pthread_mutex_lock() 的调用会阻塞线程,直到互斥锁的所有者调用 pthread_mutex_unlock()。让我们举个例子,在下面的代码中创建了两个互斥锁:/* 创建并初始化互斥锁 */ pthread_mutex_t mutex1; pthread_mutex_t mutex2; pthread_mutex_init(&mutex1, NULL); pthread_mutex_init(&mutex2, NULL);接下来,两个线程…… 阅读更多
719 次浏览
事务内存起源于数据库理论,提供了一种替代的进程同步策略。内存事务是一个原子序列的内存读写操作。如果事务中的所有操作都已完成,则提交内存事务。否则,必须中止并回滚操作。可以通过添加到编程语言的特性来获得事务内存的易用性。考虑一个例子。假设我们有一个修改共享数据的函数 update()。传统上,此函数将使用互斥锁(或信号量)编写,如下所示:void update (){ acquire(); /* 修改共享数据 */ …… 阅读更多