3K+ 次浏览
隐式线程解决这些难题并更好地支持多线程应用程序设计的一种方法是将线程的创建和管理从应用程序开发者转移到编译器和运行时库。这被称为隐式线程,是当今的一种流行趋势。隐式线程主要是使用库或其他语言支持来隐藏线程的管理。在C语言的上下文中,最常见的隐式线程库是OpenMP。OpenMP是一套编译器指令以及用于C、C++或FORTRAN语言编写的程序的API,它为共享内存环境中的并行编程提供支持。OpenMP识别…… 阅读更多
2K+ 次浏览
在Windows API中,使用CreateThread()函数创建线程,并且——就像在Pthreads中一样——一组属性(如安全信息、堆栈大小和线程标志)被传递给此函数。在下面的程序中,我们使用这些属性的默认值。(默认值不会最初将线程设置为挂起状态,而是使其有资格被CPU调度程序运行。)一旦求和线程被创建,父线程必须等待它完成才能输出Sum的值,因为该值是由…… 阅读更多
Pthreads指的是POSIX标准(IEEE 1003.1c),它定义了线程创建和同步的API,这是一个线程行为规范,而不是实现。操作系统设计者可以根据自己的意愿实现这个规范。下面的C程序演示了构建多线程程序的基本Pthreads API,该程序在一个单独的线程中计算非负整数的总和。在Pthreads程序中,单独的线程在一个指定的函数中开始执行。在下面的程序中,这是runner()函数。当程序开始时,一个单线程控制在main()中开始。main()…… 阅读更多
1K+ 次浏览
向多核系统的趋势继续给系统设计师和应用程序程序员带来压力,要求他们创建更高效利用多个计算核心。操作系统的设计者应该编写使用多个处理核心来允许下图所示的并行执行的编程算法——图:多核系统上的并行执行对于应用程序程序员来说,挑战在于将现有程序转换为新的多线程程序。一般来说,在多核系统编程中存在5个方面的挑战——识别任务——这涉及检查应用程序以查找可以划分为单独的…… 阅读更多
上下文切换涉及存储进程或线程的上下文或状态,以便在需要时可以重新加载它,并且可以从与之前相同的点恢复执行。这是多任务操作系统的特性,允许单个CPU由多个进程共享。内核在内核级线程之间进行上下文切换时采取的操作是:在内核线程之间进行上下文切换通常需要保存被切换出的线程的CPU寄存器的值,并恢复被调度的新线程的CPU寄存器。
8K+ 次浏览
内核在进程之间进行上下文切换时采取的操作是:操作系统必须保存当前正在执行进程的PC和用户堆栈指针,以响应时钟中断,并将控制权转移到内核时钟中断处理程序。时钟中断处理程序将保存其余的寄存器以及其他机器状态,例如浮点寄存器的状态,保存在进程PCB中。操作系统调用调度程序来确定要执行的下一个进程。然后,操作系统从其PCB中检索下一个进程的状态并恢复寄存器…… 阅读更多
高级本地过程调用 (ALPC) 是一种消息传递机制。服务器进程发布全局可见的连接端口对象。当客户端需要子系统或服务的服务时,它打开服务器连接端口对象的句柄并将连接请求发送到端口。服务器创建一个通道并返回一个句柄给客户端。该通道由一对专用通信端口组成:一个用于客户端到服务器的消息,另一个用于服务器到客户端的消息。通信通道支持回调机制,因此客户端和服务器可以在通常预期…… 阅读更多
远程过程调用 (RPC) 是一种客户端-服务器机制,它使一台机器上的应用程序能够对另一台机器上的代码进行过程调用。客户端调用本地过程(一个存根例程),该例程将其参数打包到消息中并将其发送到网络上的特定服务器进程。然后客户端存根例程阻塞。同时,服务器解包消息,调用过程,将返回结果打包到消息中,并将它们发送回客户端存根。客户端存根解除阻塞,接收消息,解包RPC的结果,并将它们返回给调用者。这…… 阅读更多
上下文切换涉及存储方法或线程的上下文或状态,以便在需要时可以重新加载它,并且可以从与之前相同的点恢复执行。这可能是多任务软件系统的特性,并允许单个硬件被多个进程共享。当发生中断时,硬件会自动切换一部分上下文。处理程序可以保存更多上下文,具体取决于实际硬件和软件设计的细节。通常,为了减少数量,只修改上下文的一小部分…… 阅读更多
242 次浏览
定义Microsoft接口定义语言 (MIDL) 定义客户端和服务器程序之间的接口。Microsoft提供的平台软件开发工具包 (SDK) 中包含MIDL编译器,使开发人员能够创建远程过程调用 (RPC) 接口和COM/DCOM接口所需的接口定义语言 (IDL) 文件和应用程序配置文件 (ACF)。MIDL还支持为OLE Automation生成类型库。应用程序MIDL可用于基于Windows操作系统的所有客户端/服务器应用程序。MIDL还可用于为包含Unix和Apple等操作系统的异构网络环境创建客户端和服务器程序…… 阅读更多