找到 1282 篇文章 关于 MCA

操作系统中的Dekker算法

Arnab Chakraborty
更新于 2019年10月17日 11:07:57

11K+ 次浏览

Dekker算法 Dekker算法是解决临界区问题的第一个解决方案。该算法有很多版本,第五个或最终版本满足以下所有条件,并且是所有版本中最有效的。临界区问题的解决方案必须确保以下三个条件:互斥、进展、有界等待第一个版本Dekker算法成功实现了互斥。它使用变量来控制线程执行。它不断检查临界区是否可用。示例main(){ int thread_no = 1; startThreads(); } Thread1(){ do { //进入区 //等待threadno为1 ... 阅读更多

函数式编程语言

Arnab Chakraborty
更新于 2019年10月17日 10:53:32

483 次浏览

函数式编程语言专门设计用于处理符号计算和列表处理应用程序。函数式编程基于数学函数。一些流行的函数式编程语言包括:Lisp、Python、Erlang、Haskell、Clojure等。函数式编程语言分为两类:纯函数式语言 - 这些类型的函数式语言只支持函数式范式。例如 - Haskell。非纯函数式语言 - 这些类型的函数式语言支持函数式范式和命令式编程风格。例如 - LISP。函数式编程 - 特性函数式编程的特点如下:函数式编程语言的设计基于... 阅读更多

恢复进程实例的进程监控

Arnab Chakraborty
更新于 2019年10月17日 10:51:37

605 次浏览

如果多个进程被挂起在条件x上,并且某个进程执行x.signal()操作,那么我们可以通过一个简单的解决方案来确定接下来应该恢复哪个挂起的进程,即使用先进先出(FCFS)排序,以便最先等待的进程首先恢复。然而,在许多情况下,这种简单的调度方案是不够的。为此,可以使用条件等待构造。此构造具有以下形式x.wait(c);这里c是一个整数表达式,在执行wait()操作时进行评估。c的值,... 阅读更多

Peterson问题

Arnab Chakraborty
更新于 2019年10月17日 10:49:16

17K+ 次浏览

Peterson解决方案提供了解决临界区问题的一个很好的算法描述,并说明了设计满足互斥、进展和有界等待要求的软件所涉及的一些复杂性。do { flag[i] = true; turn = j; while (flag[j] && turn == j); /*临界区*/ flag[i] = false; /*剩余区*/ } while (true);Peterson解决方案中进程Pi的结构。此解决方案仅限于两个进程,它们在临界区和剩余区之间交替执行。这些进程编号为P0和P1。我们使用Pj ... 阅读更多

硬件同步

Arnab Chakraborty
更新于 2019年10月17日 09:18:41

14K+ 次浏览

在硬件同步中,我们探讨了使用各种技术(从基于硬件到基于软件的应用程序程序员可用的API)解决临界区问题的几种解决方案。这些解决方案基于锁定的前提;但是,此类锁的设计可能非常复杂。这些硬件特性可以使任何编程任务更容易,并提高系统效率。在这里,我们介绍一些许多系统上可用的简单硬件指令,并展示如何有效地使用它们来解决临界区问题。如果我们可以在修改共享变量时阻止中断发生。临界区问题可以... 阅读更多

Windows线程的数据结构

Arnab Chakraborty
更新于 2019年10月17日 09:10:35

536 次浏览

Windows实现了Windows API,这是Microsoft操作系统系列(Windows 98、NT、2000和XP,以及Windows 7)的主要API。基本上,Windows应用程序作为单独的进程运行,每个进程可能包含一个或多个线程。此外,Windows使用一对一映射,其中每个用户级线程都映射到一个关联的内核线程。线程的一般组件包括:唯一标识线程的线程ID一组表示处理器状态的寄存器用户在用户模式下运行线程时使用的堆栈,以及内核... 阅读更多

轻量级进程 (LWP)

Arnab Chakraborty
更新于 2019年10月17日 09:07:48

3K+ 次浏览

许多系统实现多对多或两级模型,在用户线程和内核线程之间放置一个中间数据结构。此数据结构(通常称为轻量级进程或LWP)如下图所示。对于用户线程库,LWP似乎是一个虚拟处理器,应用程序可以在其上调度用户线程运行。每个轻量级进程都附加到一个内核线程,并且操作系统将内核线程调度到物理处理器上运行。如果内核线程阻塞(例如,在等待I/O时),LWP也会阻塞... 阅读更多

调度器激活

Arnab Chakraborty
更新于 2019年10月17日 09:05:22

2K+ 次浏览

用户线程库和内核之间通信的一种技术称为调度器激活。它的工作方式如下:内核为应用程序提供一组虚拟处理器(LWP),应用程序可以在可用的虚拟处理器上调度用户线程。此外,内核必须通知应用程序某些事件。此过程称为上行调用。上行调用由线程库使用上行调用处理程序来处理,并且上行调用处理程序必须在虚拟处理器上运行。当应用程序线程即将阻塞时,会发生触发上行调用的一个事件。在这种情况下,... 阅读更多

线程局部存储 (TLS)

Arnab Chakraborty
更新于 2019年10月17日 09:03:18

804 次浏览

线程共享其所属进程的数据。此数据共享提供了多线程编程的优势之一。但是,在某些情况下,每个线程可能需要其自己的某些数据的副本。此类数据称为线程局部存储(或TLS)。例如,在事务处理系统中,我们可能会在单独的线程中为每个事务提供服务。每个事务可能会分配一个唯一的标识符。为了将每个线程与其唯一的标识符关联起来,我们可以使用线程局部存储。很容易将TLS与局部变量混淆。仅在单个函数调用期间可见局部变量,而TLS ... 阅读更多

什么是线程取消?

Arnab Chakraborty
更新于 2020年1月31日 11:07:24

5K+ 次浏览

在线程完成之前终止线程称为线程取消。例如,如果多个线程同时搜索数据库,并且一个线程返回结果,则可以取消其余线程。另一种情况可能是当用户按下网页浏览器上的按钮以停止网页进一步加载时。通常,使用多个线程加载网页 - 每张图片都在单独的线程中加载。当用户在浏览器上按下停止按钮时,将取消加载页面所有线程。要... 阅读更多

广告
© . All rights reserved.