# HG changeset patch # User Noah Evans # Date 1307445539 0 # Node ID 85df9273b94554d3563509ab3cfcdc63001e2e26 # Parent ddaa629716d50dce42e334f51fbcbbf92c70c3f4 paper modifications and more performance counter code diff -r ddaa629716d5 -r 85df9273b945 doc/papers/nix/nix.ms --- a/doc/papers/nix/nix.ms Tue Jun 07 09:08:27 2011 +0000 +++ b/doc/papers/nix/nix.ms Tue Jun 07 11:18:59 2011 +0000 @@ -13,7 +13,9 @@ Francisco J. Ballesteros Gorka Guardiola Enrique Soriano -(want your name here? Just ask!) +Jim McKie +Charles Forsyth +Noah Evans .AB This paper describes NIX, a prototype operating system for future manycore CPUs. NIX features a heterogeneous CPU model and a change @@ -52,7 +54,7 @@ However, in the era of multi-core and many-core machines, we believe that we could get rid of the entire operating system kernel. We advocate for a null-kernel or zero-kernel approach, where applications are assigned to -cores without no OS interference; that is, without an operating system kernel. +cores with no OS interference; that is, without an operating system kernel. Following this idea, we have built NIX. .PP NIX is a new operating system, evolving from a traditional operating @@ -74,7 +76,7 @@ possible future direction. .PP NIX uses a messaging protocol between cores based on shared-memory -active messages. A active message sends not just references to data, +active messages. An active message sends not just references to data, but also to code. The protocol uses a shared memory data structure, containing cache-aligned fields. In particular, it contains @@ -98,14 +100,14 @@ sheet designs. NIX thus begins life with a working kernel and full set of userland code. .PP -The idea to keep a standard time-sharing kernel as it is now, but be +The idea is to keep a standard time-sharing kernel as it is now, but to be able to exploit other cores for either user or kernel intensive processes. In the worst case, the time-sharing kernel will be able to work as it does now. In the best case, applications will be able to run as fast as permitted by the raw hardware. .PP NIX derives from Plan 9 from Bell Labs. -Source code, compiled for Plan 9, also work son NIX. We make an even +Source code, compiled for Plan 9, also works on NIX. We make an even stronger guarantee: if a binary worked on Plan 9, it will work on NIX. .PP NIX partitions cores by function, hence implementing a type of @@ -128,17 +130,17 @@ but TCs, as determined by the needs of the user. When all the cores are TC cores, behaviour is not different from a SMP system. .IP 2 -The second, AC, is an Application Core: only APs can be Application +The second, AC, is an application core: only APs can be Application Cores. Application cores run applications, in a non-preemptive mode, and never field interrupts. In this case, applications run as if they had no operating system, but they can still make system calls and rely on OS services as provided by other cores. But for performance, running on ACs is transparent to applications, unless they want to -take control of this. +take control of this feature. .IP 3 -The third, KC, is a Kernel Core. Kernel Cores can be created under +The third, KC, is a kernel core. Kernel cores can be created under control of the TC. KCs do nothing but run OS tasks for the TC. A KC -might, for example, run a file system. KCs never run user mode code. +might, for example, run a file system call. KCs never run user mode code. Typical usages for KCs are to service interrupts from device drivers and to perform system calls requested to, otherwise overloaded, TCs. .LP @@ -199,7 +201,7 @@ Application cores. The BSP (a TC) coordinates the roles for other cores, which may change during time. .F3 -.PP +.LP Therefore, there are two different types of kernel in the system: TCs and KCs execute the standard time-sharing kernel. ACs execute almost without a kernel, but for a few exception handlers and their main scheduling loop, @@ -212,7 +214,7 @@ Cores can change roles, again under the control of the TC. A core might be needed for applications, in which case NIX can direct the core to enter the AC command loop. Later, the TC might instruct the core -to exit the AC loop and re enter the group of +to exit the AC loop and re-enter the group of TCs. At present, only one core ­the BSP­ boots to become a TC; all other cores boot and enter the AC command loop. This will be fixed soon. .NH 1 @@ -338,7 +340,7 @@ is found on a different core, but the kernel part remains in the TC as a handler for system calls and traps. .F3 -.PP +.LP Binary compatibility for processes is hence rather easy: old processes only run on a TC, unless the kernel decides otherwise. If a user makes a mistake and starts an old binary @@ -357,12 +359,12 @@ standard toolkit of IPC mechanisms in Plan 9, NIX includes two mechanisms for this purpose: .IP \(bu -Optimistic user-level semaphores. +Optimistic user-level semaphores, and .IP \(bu -Tubes +Tubes. .LP NIX semaphores use atomic increment and decrement operations, -as found on AMD64 architectures, to update a semaphore value in +as found on AMD64 and other architectures, to update a semaphore value in order to synchronize. If the operation performed in the semaphore may proceed without blocking (and without requiring to awake a peer process), it is performed by the user library without entering the kernel. @@ -389,21 +391,22 @@ .I semwakeup ) to block or wake up another process, if required. Optionally, before blocking, .I downsem -may spin, busy waiting for a chance to perform a down on the semaphore. +may spin, busy waiting for a chance to perform a down on the semaphore +without blocking. .PP .I Altsems is a novel operation, which tries to perform a .I downsem in one of the given semaphores. It is not known in advance in which -semaphore will be the down operation performed. If more than one -semaphores are ready for a down without blocking, one of them is elected +semaphore will be the down operation performed. If several +semaphores are ready for a down without blocking, one of them is selected and the down is performed; the function returns an index value indicating which one. If none of the downs may proceed, the operation calls the kernel and blocks. .PP -Therefore, in the best case, a -.I downsem -is performed in user space, without entering the kernel, in a non-determinist way. +Therefore, in the best case, +.I altsems +performs a down in user space, without entering the kernel, in a non-determinist way. In the worst case, the kernel is used to await for a chance to down one of the semaphores. Before doing so, the operation may be configured to spin and busy wait for a while. @@ -411,19 +414,17 @@ Optimistic semaphores, as described, are used in NIX to implement shared memory communication channels called .I tubes . -.PP -A tube is a buffered unidirectional channel where fixed-size messages can be +A tube is a buffered unidirectional channel. Fixed-size messages can be sent and received from it (but different tubes may have different message sizes). .PP The implementation is a simple producer-consumer, but, because of the -semaphores used, is able to run at user space without entering the kernel +semaphores used, it is able to run at user space without entering the kernel when sends and receives may proceed. .PP It is feasible to try to perform multiple sends and receives at the same time, -waiting for the chance to execute one of them. This operation exploits the -semantics and implementation of +waiting for the chance to execute one of them. This operation exploits .I altsems -to operate at user-level if possible, and call the kernel otherwise. +to operate at user-level if possible, calling the kernel otherwise. It suffices to fill an array of semaphores with either the ones representing messages in a tube, or the ones representing empty slots in a tube, depending on whether a receive or a send operation is selected. Then, calling @@ -447,9 +448,18 @@ pre-paging, which is interesting on its own. .PP To dispatch a process for -execution at one AC, we use the inter core call, active message, -mechanism. -The figure shows the inter-core-call or ICC mechanism. +execution at one AC we use the inter-core-call, active message, +mechanism. This figure explains how it works: +.PS +boxht=.5 +right +box "runac" +arrow <-> dotted +box "acsched" +box invis "TC" with .s at 1st box.n +box invis "AC" with .s at 2nd box.n +.PE +.LP The function .I acsched runs on ACs, as part of its start-up sequence. It sits in a tight loop spinning @@ -469,16 +479,7 @@ .I ready on the process that scheduled the function for execution. You think of this as a soft IPI. -.PS -boxht=.5 -right -box "runac" -arrow <-> dotted -box "acsched" -box invis "TC" with .s at 1st box.n -box invis "AC" with .s at 2nd box.n -.PE -.LP +.PP While an AC is performing an action dictated by a process in the TC, its .I Mach diff -r ddaa629716d5 -r 85df9273b945 doc/papers/nix/nix.pdf Binary file doc/papers/nix/nix.pdf has changed diff -r ddaa629716d5 -r 85df9273b945 doc/papers/nix/nix.ps --- a/doc/papers/nix/nix.ps Tue Jun 07 09:08:27 2011 +0000 +++ b/doc/papers/nix/nix.ps Tue Jun 07 11:18:59 2011 +0000 @@ -632,343 +632,283 @@ (J. Ballesteros) 3020 1770 w (Gorka Guardiola) 2653 1900 w (Enrique Soriano) 2671 2030 w -(\(want) 2212 2160 w -(your) 2546 2160 w -(name here?) 2826 2160 w -(Just) 3479 2160 w -(ask!\)) 3723 2160 w -(ABSTRACT) 2817 2635 w -11 /LucidaSansUnicode00 f -(This) 1366 2915 w -(paper) 1647 2915 w -(describes) 2009 2915 w -(NIX,) 2573 2915 w -(a) 2847 2915 w -(prototype) 2965 2915 w -(operating) 3540 2915 w -(system) 4110 2915 w -(for) 4541 2915 w -(future) 4751 2915 w -(manycore) 1116 3045 w -(CPUs.) 1679 3045 w -(NIX) 2062 3045 w -(features) 2288 3045 w -(a) 2768 3045 w -(heterogeneous) 2873 3045 w -(CPU) 3713 3045 w -(model) 3970 3045 w -(and) 4346 3045 w -(a) 4588 3045 w -(change) 4693 3045 w -(from) 1116 3175 w -(the) 1443 3175 w -(traditional) 1687 3175 w -(Unix) 2309 3175 w -(memory) 2625 3175 w -(model) 3133 3175 w -(of) 3538 3175 w -(separate) 3719 3175 w -(virtual) 4249 3175 w -(address) 4658 3175 w -(spaces.) 1116 3305 w -(NIX) 1592 3305 w -(has) 1820 3305 w -(been) 2050 3305 w -(influenced) 2356 3305 w -(by) 2959 3305 w -(our) 3130 3305 w -(work) 3355 3305 w -(in) 3661 3305 w -(High) 3806 3305 w -(Performance) 4100 3305 w -(com\255) 4815 3305 w -(puting, both on Blue) 1116 3435 w -(Gene) 2243 3435 w -(and more) 2549 3435 w -(traditional) 3093 3435 w -(clusters.) 3677 3435 w -(NIX) 1366 3601 w -(partitions) 1586 3601 w -(cores) 2136 3601 w -(by) 2460 3601 w -(function:) 2624 3601 w -(Timesharing) 3138 3601 w -(Cores,) 3839 3601 w -(or) 4219 3601 w -(TCs;) 4370 3601 w -(Applica\255) 4645 3601 w -(tion) 1116 3731 w -(Cores,) 1360 3731 w -(or) 1737 3731 w -(ACs; and Kernel) 1885 3731 w -(Cores, or KCs.) 2772 3731 w -(There) 3604 3731 w -(is always at) 3945 3731 w -(least) 4592 3731 w -(one) 4879 3731 w -(TC,) 1116 3861 w -(and) 1350 3861 w -(it) 1602 3861 w -(runs) 1729 3861 w -(applications) 2020 3861 w -(in) 2718 3861 w -(the) 2872 3861 w -(traditional) 3097 3861 w -(model.) 3700 3861 w -(KCs) 4157 3861 w -(are) 4416 3861 w -(optional) 4639 3861 w -(cores) 1116 3991 w -(created) 1444 3991 w -(to) 1882 3991 w -(run) 2032 3991 w -(kernel) 2255 3991 w -(functions) 2630 3991 w -(on) 3169 3991 w -(demand.) 3346 3991 w -(ACs) 3889 3991 w -(are) 4138 3991 w -(also) 4347 3991 w -(optional,) 4604 3991 w -(and) 1116 4121 w -(are) 1351 4121 w -(entirely) 1556 4121 w -(turned) 1992 4121 w -(over) 2382 4121 w -(to) 2650 4121 w -(running) 2795 4121 w -(an) 3249 4121 w -(application,) 3416 4121 w -(with) 4077 4121 w -(no) 4341 4121 w -(interrupts;) 4514 4121 w -(not) 1116 4251 w -(even) 1349 4251 w -(clock) 1654 4251 w -(interrupts.) 1985 4251 w -(Unlike) 2638 4251 w -(traditional) 3028 4251 w -(HPC) 3633 4251 w -(Light) 3907 4251 w -(Weight) 4230 4251 w -(kernels,) 4652 4251 w -(functions) 1116 4381 w -(are) 1654 4381 w -(not) 1863 4381 w -(static:) 2080 4381 w -(the) 2443 4381 w -(number) 2655 4381 w -(of) 3110 4381 w -(TCs,) 3259 4381 w -(KCs,) 3536 4381 w -(and) 3817 4381 w -(ACs) 4057 4381 w -(can) 4307 4381 w -(change) 4534 4381 w -(as) 4959 4381 w -(needs) 1116 4511 w -(change.) 1495 4511 w -(Unlike) 2010 4511 w -(a) 2406 4511 w -(traditional) 2529 4511 w -(operating) 3140 4511 w -(system,) 3715 4511 w -(applications) 4186 4511 w -(can) 4891 4511 w -(access) 1116 4641 w -(services) 1506 4641 w -(by) 1976 4641 w -(sending) 2146 4641 w -(a) 2613 4641 w -(message) 2718 4641 w -(to) 3229 4641 w -(the) 3381 4641 w -(TC) 3596 4641 w -(kernel,) 3785 4641 w -(rather) 4197 4641 w -(than) 4563 4641 w -(by) 4845 4641 w -(a) 5015 4641 w -(system call) 1116 4771 w -(trap.) 1741 4771 w -(Control) 1366 4937 w -(of) 1804 4937 w -(ACs) 1954 4937 w -(is) 2204 4937 w -(managed) 2334 4937 w -(by) 2867 4937 w -(means) 3036 4937 w -(of) 3428 4937 w -(active) 3579 4937 w -(messages.) 3931 4937 w -(NIX) 4567 4937 w -(takes) 4792 4937 w -(advantage) 1116 5067 w -(of) 1713 5067 w -(the) 1870 5067 w -(shared-memory) 2090 5067 w -(nature) 2999 5067 w -(of) 3393 5067 w -(manycore) 3550 5067 w -(CPUs,) 4117 5067 w -(and) 4470 5067 w -(passes) 4716 5067 w -(pointers to both data) 1116 5197 w -(and code) 2281 5197 w -(to coordinate) 2803 5197 w -(among cores.) 3549 5197 w +(Jim McKie) 2836 2160 w +(Charles) 2675 2290 w +(Forsyth) 3117 2290 w +(Noah Evans) 2784 2420 w +(ABSTRACT) 2817 2895 w +11 /LucidaSansUnicode00 f +(This) 1366 3175 w +(paper) 1647 3175 w +(describes) 2009 3175 w +(NIX,) 2573 3175 w +(a) 2847 3175 w +(prototype) 2965 3175 w +(operating) 3540 3175 w +(system) 4110 3175 w +(for) 4541 3175 w +(future) 4751 3175 w +(manycore) 1116 3305 w +(CPUs.) 1679 3305 w +(NIX) 2062 3305 w +(features) 2288 3305 w +(a) 2768 3305 w +(heterogeneous) 2873 3305 w +(CPU) 3713 3305 w +(model) 3970 3305 w +(and) 4346 3305 w +(a) 4588 3305 w +(change) 4693 3305 w +(from) 1116 3435 w +(the) 1443 3435 w +(traditional) 1687 3435 w +(Unix) 2309 3435 w +(memory) 2625 3435 w +(model) 3133 3435 w +(of) 3538 3435 w +(separate) 3719 3435 w +(virtual) 4249 3435 w +(address) 4658 3435 w +(spaces.) 1116 3565 w +(NIX) 1592 3565 w +(has) 1820 3565 w +(been) 2050 3565 w +(influenced) 2356 3565 w +(by) 2959 3565 w +(our) 3130 3565 w +(work) 3355 3565 w +(in) 3661 3565 w +(High) 3806 3565 w +(Performance) 4100 3565 w +(com\255) 4815 3565 w +(puting, both on Blue) 1116 3695 w +(Gene) 2243 3695 w +(and more) 2549 3695 w +(traditional) 3093 3695 w +(clusters.) 3677 3695 w +(NIX) 1366 3861 w +(partitions) 1586 3861 w +(cores) 2136 3861 w +(by) 2460 3861 w +(function:) 2624 3861 w +(Timesharing) 3138 3861 w +(Cores,) 3839 3861 w +(or) 4219 3861 w +(TCs;) 4370 3861 w +(Applica\255) 4645 3861 w +(tion) 1116 3991 w +(Cores,) 1360 3991 w +(or) 1737 3991 w +(ACs; and Kernel) 1885 3991 w +(Cores, or KCs.) 2772 3991 w +(There) 3604 3991 w +(is always at) 3945 3991 w +(least) 4592 3991 w +(one) 4879 3991 w +(TC,) 1116 4121 w +(and) 1350 4121 w +(it) 1602 4121 w +(runs) 1729 4121 w +(applications) 2020 4121 w +(in) 2718 4121 w +(the) 2872 4121 w +(traditional) 3097 4121 w +(model.) 3700 4121 w +(KCs) 4157 4121 w +(are) 4416 4121 w +(optional) 4639 4121 w +(cores) 1116 4251 w +(created) 1444 4251 w +(to) 1882 4251 w +(run) 2032 4251 w +(kernel) 2255 4251 w +(functions) 2630 4251 w +(on) 3169 4251 w +(demand.) 3346 4251 w +(ACs) 3889 4251 w +(are) 4138 4251 w +(also) 4347 4251 w +(optional,) 4604 4251 w +(and) 1116 4381 w +(are) 1351 4381 w +(entirely) 1556 4381 w +(turned) 1992 4381 w +(over) 2382 4381 w +(to) 2650 4381 w +(running) 2795 4381 w +(an) 3249 4381 w +(application,) 3416 4381 w +(with) 4077 4381 w +(no) 4341 4381 w +(interrupts;) 4514 4381 w +(not) 1116 4511 w +(even) 1349 4511 w +(clock) 1654 4511 w +(interrupts.) 1985 4511 w +(Unlike) 2638 4511 w +(traditional) 3028 4511 w +(HPC) 3633 4511 w +(Light) 3907 4511 w +(Weight) 4230 4511 w +(kernels,) 4652 4511 w +(functions) 1116 4641 w +(are) 1654 4641 w +(not) 1863 4641 w +(static:) 2080 4641 w +(the) 2443 4641 w +(number) 2655 4641 w +(of) 3110 4641 w +(TCs,) 3259 4641 w +(KCs,) 3536 4641 w +(and) 3817 4641 w +(ACs) 4057 4641 w +(can) 4307 4641 w +(change) 4534 4641 w +(as) 4959 4641 w +(needs) 1116 4771 w +(change.) 1495 4771 w +(Unlike) 2010 4771 w +(a) 2406 4771 w +(traditional) 2529 4771 w +(operating) 3140 4771 w +(system,) 3715 4771 w +(applications) 4186 4771 w +(can) 4891 4771 w +(access) 1116 4901 w +(services) 1506 4901 w +(by) 1976 4901 w +(sending) 2146 4901 w +(a) 2613 4901 w +(message) 2718 4901 w +(to) 3229 4901 w +(the) 3381 4901 w +(TC) 3596 4901 w +(kernel,) 3785 4901 w +(rather) 4197 4901 w +(than) 4563 4901 w +(by) 4845 4901 w +(a) 5015 4901 w +(system call) 1116 5031 w +(trap.) 1741 5031 w +(Control) 1366 5197 w +(of) 1804 5197 w +(ACs) 1954 5197 w +(is) 2204 5197 w +(managed) 2334 5197 w +(by) 2867 5197 w +(means) 3036 5197 w +(of) 3428 5197 w +(active) 3579 5197 w +(messages.) 3931 5197 w +(NIX) 4567 5197 w +(takes) 4792 5197 w +(advantage) 1116 5327 w +(of) 1713 5327 w +(the) 1870 5327 w +(shared-memory) 2090 5327 w +(nature) 2999 5327 w +(of) 3393 5327 w +(manycore) 3550 5327 w +(CPUs,) 4117 5327 w +(and) 4470 5327 w +(passes) 4716 5327 w +(pointers to both data) 1116 5457 w +(and code) 2281 5457 w +(to coordinate) 2803 5457 w +(among cores.) 3549 5457 w 11 /LucidaSans-Demi f -(1.) 720 5587 w -(Introduction) 888 5587 w -11 /LucidaSansUnicode00 f -(In) 720 5753 w -(many) 860 5753 w -(cases,) 1188 5753 w -(it) 1554 5753 w -(has) 1667 5753 w -(been) 1892 5753 w -(argued) 2193 5753 w -(that) 2606 5753 w -(the) 2857 5753 w -(operating) 3068 5753 w -(system) 3621 5753 w -(stands) 4035 5753 w -(in) 4427 5753 w -(the) 4568 5753 w -(way) 4780 5753 w -(of) 5024 5753 w -(appli\255) 5173 5753 w -(cations) 720 5883 w -(and) 1137 5883 w -(that) 1371 5883 w -(they cannot) 1617 5883 w -(increase) 2276 5883 w -(their performance) 2753 5883 w -(due) 3749 5883 w -(to system activities and due) 3983 5883 w -(to) 720 6013 w -(its) 869 6013 w -(implementation.) 1039 6013 w -(In) 1954 6013 w -(particular,) 2095 6013 w -(data) 2681 6013 w -(base) 2954 6013 w -(systems,) 3244 6013 w -(fine-tuned) 3751 6013 w -(servers,) 4368 6013 w -(applications) 4828 6013 w -(built) 720 6143 w -(using the) 997 6143 w -(exokernel) 1530 6143 w -(approach, with libOSes, all) 2094 6143 w -(share) 3547 6143 w -(this view.) 3874 6143 w -(However,) 970 6309 w -(in) 1521 6309 w -(the) 1678 6309 w -(era) 1906 6309 w -(of) 2131 6309 w -(multi-core) 2296 6309 w -(and) 2923 6309 w -(many-core) 3179 6309 w -(machines,) 3819 6309 w -(we) 4417 6309 w -(believe) 4622 6309 w -(that) 5056 6309 w -(we) 5325 6309 w -(could) 720 6439 w -(get) 1066 6439 w -(rid) 1291 6439 w -(of) 1491 6439 w -(the) 1652 6439 w -(entire) 1876 6439 w -(operating) 2239 6439 w -(system) 2805 6439 w -(kernel.) 3232 6439 w -(We) 3653 6439 w -(advocate) 3863 6439 w -(for) 4390 6439 w -(a) 4596 6439 w -(null-kernel) 4710 6439 w -(or) 5360 6439 w -(zero-kernel) 720 6569 w -(approach,) 1397 6569 w -(where) 1971 6569 w -(applications) 2336 6569 w -(are) 3023 6569 w -(assigned) 3234 6569 w -(to) 3749 6569 w -(cores) 3900 6569 w -(without) 4229 6569 w -(no) 4674 6569 w -(OS) 4852 6569 w -(interfer\255) 5040 6569 w -(ence; that) 720 6699 w -(is, without) 1284 6699 w -(an operating system kernel.) 1879 6699 w -(Following this idea, we) 3438 6699 w -(have) 4691 6699 w -(built) 4974 6699 w -(NIX.) 5251 6699 w -(NIX) 970 6865 w -(is) 1204 6865 w -(a) 1344 6865 w -(new) 1457 6865 w -(operating) 1724 6865 w -(system,) 2289 6865 w -(evolving) 2750 6865 w -(from) 3245 6865 w -(a) 3552 6865 w -(traditional) 3665 6865 w -(operating) 4266 6865 w -(system) 4831 6865 w -(in) 5258 6865 w -(a) 5411 6865 w -(way) 720 6995 w -(that) 971 6995 w -(preserves) 1230 6995 w -(binary) 1792 6995 w -(compatibility) 2172 6995 w -(but) 2911 6995 w -(also) 3136 6995 w -(enables) 3399 6995 w -(a) 3856 6995 w -(sharp) 3964 6995 w -(break) 4310 6995 w -(with) 4658 6995 w -(past) 4931 6995 w -(prac\255) 5205 6995 w -(tice.) 720 7125 w -(NIX) 1019 7125 w -(is) 1239 7125 w -(strongly) 1365 7125 w -(influenced) 1837 7125 w -(by) 2433 7125 w -(our) 2597 7125 w -(experiences) 2815 7125 w -(over) 3494 7125 w -(the) 3763 7125 w -(past) 3973 7125 w -(five) 4239 7125 w -(years) 4470 7125 w -(with) 4790 7125 w -(running) 5055 7125 w -(Plan) 720 7255 w -(9) 1005 7255 w -(on) 1137 7255 w -(some) 1335 7255 w -(of) 1685 7255 w -(the) 1856 7255 w -(largest) 2090 7255 w -(supercomputers) 2518 7255 w -(in) 3447 7255 w -(the) 3610 7255 w -(world.) 3844 7255 w -(It) 4275 7255 w -(has) 4411 7255 w -(been) 4658 7255 w -(said) 4981 7255 w -(that) 5261 7255 w +(1.) 720 5847 w +(Introduction) 888 5847 w +11 /LucidaSansUnicode00 f +(In) 720 6013 w +(many) 860 6013 w +(cases,) 1188 6013 w +(it) 1554 6013 w +(has) 1667 6013 w +(been) 1892 6013 w +(argued) 2193 6013 w +(that) 2606 6013 w +(the) 2857 6013 w +(operating) 3068 6013 w +(system) 3621 6013 w +(stands) 4035 6013 w +(in) 4427 6013 w +(the) 4568 6013 w +(way) 4780 6013 w +(of) 5024 6013 w +(appli\255) 5173 6013 w +(cations) 720 6143 w +(and) 1137 6143 w +(that) 1371 6143 w +(they cannot) 1617 6143 w +(increase) 2276 6143 w +(their performance) 2753 6143 w +(due) 3749 6143 w +(to system activities and due) 3983 6143 w +(to) 720 6273 w +(its) 869 6273 w +(implementation.) 1039 6273 w +(In) 1954 6273 w +(particular,) 2095 6273 w +(data) 2681 6273 w +(base) 2954 6273 w +(systems,) 3244 6273 w +(fine-tuned) 3751 6273 w +(servers,) 4368 6273 w +(applications) 4828 6273 w +(built) 720 6403 w +(using the) 997 6403 w +(exokernel) 1530 6403 w +(approach, with libOSes, all) 2094 6403 w +(share) 3547 6403 w +(this view.) 3874 6403 w +(However,) 970 6569 w +(in) 1521 6569 w +(the) 1678 6569 w +(era) 1906 6569 w +(of) 2131 6569 w +(multi-core) 2296 6569 w +(and) 2923 6569 w +(many-core) 3179 6569 w +(machines,) 3819 6569 w +(we) 4417 6569 w +(believe) 4622 6569 w +(that) 5056 6569 w +(we) 5325 6569 w +(could) 720 6699 w +(get) 1066 6699 w +(rid) 1291 6699 w +(of) 1491 6699 w +(the) 1652 6699 w +(entire) 1876 6699 w +(operating) 2239 6699 w +(system) 2805 6699 w +(kernel.) 3232 6699 w +(We) 3653 6699 w +(advocate) 3863 6699 w +(for) 4390 6699 w +(a) 4596 6699 w +(null-kernel) 4710 6699 w +(or) 5360 6699 w +(zero-kernel) 720 6829 w +(approach,) 1390 6829 w +(where) 1957 6829 w +(applications) 2315 6829 w +(are) 2995 6829 w +(assigned) 3199 6829 w +(to) 3708 6829 w +(cores) 3853 6829 w +(with) 4176 6829 w +(no) 4439 6829 w +(OS) 4611 6829 w +(interference;) 4793 6829 w +(that) 720 6959 w +(is, without) 966 6959 w +(an operating system kernel.) 1561 6959 w +(Following this idea, we) 3120 6959 w +(have) 4373 6959 w +(built) 4656 6959 w +(NIX.) 4933 6959 w cleartomark showpage saveobj restore @@ -978,571 +918,590 @@ mark 2 pagesetup 11 /LucidaSansUnicode00 f -(supercomputing) 720 850 w -(technology) 1636 850 w -(frequently) 2267 850 w -(tests) 2857 850 w -(out) 3159 850 w -(ideas) 3381 850 w -(that) 3707 850 w -(later) 3964 850 w -(appear) 4251 850 w -(in) 4664 850 w -(general) 4810 850 w -(pur\255) 5254 850 w -(pose) 720 980 w -(computing, and certainly our experience) 1009 980 w -(is no exception.) 3207 980 w -(NIX) 970 1146 w -(is) 1206 1146 w -(designed) 1348 1146 w -(for) 1888 1146 w -(manycore) 2095 1146 w -(processors.) 2702 1146 w -(The) 3405 1146 w -(manycore) 3659 1146 w -(is) 4232 1146 w -(probably) 4375 1146 w -(obvious) 4899 1146 w -(at) 5370 1146 w -(this) 720 1276 w -(point.) 963 1276 w -(The) 1356 1276 w -(idea) 1601 1276 w -(of) 1871 1276 w -(hetereogeneity) 2025 1276 w -(derives) 2868 1276 w -(from) 3297 1276 w -(discussions) 3598 1276 w -(we) 4260 1276 w -(have) 4453 1276 w -(had) 4747 1276 w -(with) 4990 1276 w -(sev\255) 5261 1276 w -(eral) 720 1406 w -(vendors.) 966 1406 w -(First,) 1506 1406 w -(the) 1820 1406 w -(vendors) 2037 1406 w -(would) 2507 1406 w -(prefer) 2874 1406 w -(that) 3244 1406 w -(not) 3501 1406 w -(all) 3723 1406 w -(cores) 3894 1406 w -(run) 4227 1406 w -(an) 4455 1406 w -(OS) 4631 1406 w -(at) 4823 1406 w -(all) 4972 1406 w -(times.) 5144 1406 w -(Second,) 720 1536 w -(there) 1187 1536 w -(is) 1516 1536 w -(a) 1655 1536 w -(very) 1766 1536 w -(real) 2037 1536 w -(possibility) 2287 1536 w -(that) 2880 1536 w -(on) 3141 1536 w -(some) 3326 1536 w -(future) 3663 1536 w -(manycore) 4038 1536 w -(systems,) 4606 1536 w -(not) 5121 1536 w -(all) 5347 1536 w -(cores) 720 1666 w -(will) 1061 1666 w -(be) 1298 1666 w -(able) 1485 1666 w -(to) 1765 1666 w -(support) 1929 1666 w -(an) 2400 1666 w -(OS.) 2585 1666 w -(We) 2821 1666 w -(have) 3034 1666 w -(seen) 3338 1666 w -(some) 3642 1666 w -(flavor) 3985 1666 w -(of) 4344 1666 w -(this) 4508 1666 w -(with) 4761 1666 w -(the) 5043 1666 w -(Cell) 5270 1666 w -(which, while) 720 1796 w -(a) 1413 1796 w -(failed effort, does point) 1509 1796 w -(toward a) 2809 1796 w -(possible) 3308 1796 w -(future) 3786 1796 w -(direction.) 4146 1796 w -(NIX uses a) 970 1962 w -(messaging protocol) 1560 1962 w -(between cores based on) 2647 1962 w -(shared-memory) 3975 1962 w -(active) 4871 1962 w -(mes\255) 5216 1962 w -(sages.) 720 2092 w -(A) 1098 2092 w -(active) 1214 2092 w -(message) 1563 2092 w -(sends) 2070 2092 w -(not) 2421 2092 w -(just) 2637 2092 w -(references) 2875 2092 w -(to) 3474 2092 w -(data,) 3621 2092 w -(but) 3927 2092 w -(also) 4144 2092 w -(to) 4399 2092 w -(code.) 4546 2092 w -(The) 4909 2092 w -(proto\255) 5147 2092 w -(col) 720 2222 w -(uses) 913 2222 w -(a) 1193 2222 w -(shared) 1292 2222 w -(memory) 1691 2222 w -(data) 2164 2222 w -(structure,) 2434 2222 w -(containing) 2989 2222 w -(cache-aligned) 3589 2222 w -(fields.) 4387 2222 w -(In) 4788 2222 w -(particular,) 4927 2222 w -(it) 720 2352 w -(contains) 835 2352 w -(arguments,) 1326 2352 w -(a) 1974 2352 w -(function) 2077 2352 w -(pointer,) 2560 2352 w -(to) 3021 2352 w -(be) 3171 2352 w -(run) 3344 2352 w -(by) 3567 2352 w -(the) 3735 2352 w -(peer) 3948 2352 w -(core,) 4228 2352 w -(and) 4535 2352 w -(an) 4775 2352 w -(indication) 4946 2352 w -(for flushing TLB) 720 2482 w -(\(when required\).) 1602 2482 w +(NIX) 970 850 w +(is) 1204 850 w +(a) 1344 850 w +(new) 1457 850 w +(operating) 1724 850 w +(system,) 2289 850 w +(evolving) 2750 850 w +(from) 3245 850 w +(a) 3552 850 w +(traditional) 3665 850 w +(operating) 4266 850 w +(system) 4831 850 w +(in) 5258 850 w +(a) 5411 850 w +(way) 720 980 w +(that) 971 980 w +(preserves) 1230 980 w +(binary) 1792 980 w +(compatibility) 2172 980 w +(but) 2911 980 w +(also) 3136 980 w +(enables) 3399 980 w +(a) 3856 980 w +(sharp) 3964 980 w +(break) 4310 980 w +(with) 4658 980 w +(past) 4931 980 w +(prac\255) 5205 980 w +(tice.) 720 1110 w +(NIX) 1019 1110 w +(is) 1239 1110 w +(strongly) 1365 1110 w +(influenced) 1837 1110 w +(by) 2433 1110 w +(our) 2597 1110 w +(experiences) 2815 1110 w +(over) 3494 1110 w +(the) 3763 1110 w +(past) 3973 1110 w +(five) 4239 1110 w +(years) 4470 1110 w +(with) 4790 1110 w +(running) 5055 1110 w +(Plan) 720 1240 w +(9) 980 1240 w +(on) 1087 1240 w +(some) 1260 1240 w +(of) 1585 1240 w +(the) 1731 1240 w +(largest) 1940 1240 w +(supercomputers) 2343 1240 w +(in) 3247 1240 w +(the) 3385 1240 w +(world.) 3594 1240 w +(It) 4000 1240 w +(has) 4111 1240 w +(been) 4334 1240 w +(said) 4633 1240 w +(that) 4888 1240 w +(super\255) 5136 1240 w +(computing) 720 1370 w +(technology) 1344 1370 w +(frequently) 1983 1370 w +(tests) 2581 1370 w +(out) 2890 1370 w +(ideas) 3119 1370 w +(that) 3452 1370 w +(later) 3716 1370 w +(appear) 4010 1370 w +(in) 4430 1370 w +(general) 4584 1370 w +(purpose) 5036 1370 w +(computing, and certainly our experience) 720 1500 w +(is no exception.) 2918 1500 w +(NIX) 970 1666 w +(is) 1206 1666 w +(designed) 1348 1666 w +(for) 1888 1666 w +(manycore) 2095 1666 w +(processors.) 2702 1666 w +(The) 3405 1666 w +(manycore) 3659 1666 w +(is) 4232 1666 w +(probably) 4375 1666 w +(obvious) 4899 1666 w +(at) 5370 1666 w +(this) 720 1796 w +(point.) 963 1796 w +(The) 1356 1796 w +(idea) 1601 1796 w +(of) 1871 1796 w +(hetereogeneity) 2025 1796 w +(derives) 2868 1796 w +(from) 3297 1796 w +(discussions) 3598 1796 w +(we) 4260 1796 w +(have) 4453 1796 w +(had) 4747 1796 w +(with) 4990 1796 w +(sev\255) 5261 1796 w +(eral) 720 1926 w +(vendors.) 966 1926 w +(First,) 1506 1926 w +(the) 1820 1926 w +(vendors) 2037 1926 w +(would) 2507 1926 w +(prefer) 2874 1926 w +(that) 3244 1926 w +(not) 3501 1926 w +(all) 3723 1926 w +(cores) 3894 1926 w +(run) 4227 1926 w +(an) 4455 1926 w +(OS) 4631 1926 w +(at) 4823 1926 w +(all) 4972 1926 w +(times.) 5144 1926 w +(Second,) 720 2056 w +(there) 1187 2056 w +(is) 1516 2056 w +(a) 1655 2056 w +(very) 1766 2056 w +(real) 2037 2056 w +(possibility) 2287 2056 w +(that) 2880 2056 w +(on) 3141 2056 w +(some) 3326 2056 w +(future) 3663 2056 w +(manycore) 4038 2056 w +(systems,) 4606 2056 w +(not) 5121 2056 w +(all) 5347 2056 w +(cores) 720 2186 w +(will) 1061 2186 w +(be) 1298 2186 w +(able) 1485 2186 w +(to) 1765 2186 w +(support) 1929 2186 w +(an) 2400 2186 w +(OS.) 2585 2186 w +(We) 2821 2186 w +(have) 3034 2186 w +(seen) 3338 2186 w +(some) 3642 2186 w +(flavor) 3985 2186 w +(of) 4344 2186 w +(this) 4508 2186 w +(with) 4761 2186 w +(the) 5043 2186 w +(Cell) 5270 2186 w +(which, while) 720 2316 w +(a) 1413 2316 w +(failed effort, does point) 1509 2316 w +(toward a) 2809 2316 w +(possible) 3308 2316 w +(future) 3786 2316 w +(direction.) 4146 2316 w +(NIX uses a) 970 2482 w +(messaging protocol) 1560 2482 w +(between cores based on) 2647 2482 w +(shared-memory) 3975 2482 w +(active) 4871 2482 w +(mes\255) 5216 2482 w +(sages. An active) 720 2612 w +(message) 1616 2612 w +(sends not) 2118 2612 w +(just) 2675 2612 w +(references to data, but) 2908 2612 w +(also to code.) 4160 2612 w +(The) 4913 2612 w +(proto\255) 5147 2612 w +(col) 720 2742 w +(uses) 913 2742 w +(a) 1193 2742 w +(shared) 1292 2742 w +(memory) 1691 2742 w +(data) 2164 2742 w +(structure,) 2434 2742 w +(containing) 2989 2742 w +(cache-aligned) 3589 2742 w +(fields.) 4387 2742 w +(In) 4788 2742 w +(particular,) 4927 2742 w +(it) 720 2872 w +(contains) 835 2872 w +(arguments,) 1326 2872 w +(a) 1974 2872 w +(function) 2077 2872 w +(pointer,) 2560 2872 w +(to) 3021 2872 w +(be) 3171 2872 w +(run) 3344 2872 w +(by) 3567 2872 w +(the) 3735 2872 w +(peer) 3948 2872 w +(core,) 4228 2872 w +(and) 4535 2872 w +(an) 4775 2872 w +(indication) 4946 2872 w +(for flushing TLB) 720 3002 w +(\(when required\).) 1602 3002 w 11 /LucidaSans-Demi f -(2.) 720 2742 w -(The) 888 2742 w -(NIX) 1137 2742 w -(approach:) 1367 2742 w -(core) 1957 2742 w -(roles) 2235 2742 w -11 /LucidaSansUnicode00 f -(There) 720 2908 w -(are) 1074 2908 w -(a) 1291 2908 w -(few) 1401 2908 w -(common) 1638 2908 w -(attributes) 2149 2908 w -(to) 2714 2908 w -(todays) 2871 2908 w -(manycore) 3271 2908 w -(systems.) 3838 2908 w -(The) 4387 2908 w -(systems) 4635 2908 w -(have) 5114 2908 w -(a) 5411 2908 w -(non-uniform) 720 3038 w -(topology.) 1458 3038 w -(Sockets) 2044 3038 w -(contain) 2497 3038 w -(CPUs,) 2938 3038 w -(and) 3290 3038 w -(CPUs) 3536 3038 w -(contain) 3853 3038 w -(cores.) 4294 3038 w -(Each) 4698 3038 w -(socket) 4990 3038 w -(is) 5384 3038 w -(connected) 720 3168 w -(to) 1317 3168 w -(a) 1473 3168 w -(local) 1582 3168 w -(memory,) 1878 3168 w -(and) 2396 3168 w -(can) 2642 3168 w -(reach) 2875 3168 w -(other) 3216 3168 w -(memory) 3548 3168 w -(only) 4032 3168 w -(via) 4305 3168 w -(other) 4504 3168 w -(sockets,) 4836 3168 w -(via) 5322 3168 w -(one) 720 3298 w -(or) 968 3298 w -(more) 1131 3298 w -(hops;) 1458 3298 w -(access) 1804 3298 w -(to) 2202 3298 w -(memory) 2361 3298 w -(is) 2847 3298 w -(hence) 2986 3298 w -(non-uniform.) 3353 3298 w -(Core-to-core) 4164 3298 w -(and) 4930 3298 w -(core-) 5178 3298 w -(to-memory communications time) 720 3428 w -(is non-uniform.) 2545 3428 w -(A) 970 3594 w -(very) 1083 3594 w -(important) 1341 3594 w -(aspect) 1904 3594 w -(of) 2286 3594 w -(these) 2431 3594 w -(designs) 2757 3594 w -(is) 3205 3594 w -(that) 3330 3594 w -(the) 3578 3594 w -(varying) 3786 3594 w -(aspects) 4211 3594 w -(of) 4649 3594 w -(the) 4795 3594 w -(topology) 5004 3594 w -(affect) 720 3724 w -(performance,) 1066 3724 w -(but) 1823 3724 w -(not) 2045 3724 w -(correctness.) 2265 3724 w -(We) 2993 3724 w -(preserve) 3194 3724 w -(an) 3696 3724 w -(old) 3869 3724 w -(but) 4080 3724 w -(very) 4301 3724 w -(important) 4565 3724 w -(princi\255) 5134 3724 w -(ple) 720 3854 w -(in) 937 3854 w -(successful) 1091 3854 w -(computer) 1696 3854 w -(projects,) 2260 3854 w -(both) 2778 3854 w -(hardware) 3077 3854 w -(and) 3627 3854 w -(software:) 3879 3854 w -(things) 4426 3854 w -(that) 4814 3854 w -(worked) 5080 3854 w -(will) 720 3984 w -(still) 938 3984 w -(work.) 1168 3984 w -(We) 1536 3984 w -(are) 1730 3984 w -(trying) 1934 3984 w -(to) 2281 3984 w -(avoid) 2425 3984 w -(the) 2747 3984 w -(high) 2954 3984 w -(risk) 3226 3984 w -(of) 3459 3984 w -(failure) 3603 3984 w -(that) 3980 3984 w -(comes) 4227 3984 w -(with) 4606 3984 w -(clean) 4868 3984 w -(sheet) 5183 3984 w -(designs.) 720 4114 w -(NIX thus begins life) 1236 4114 w -(with a) 2313 4114 w -(working kernel) 2670 4114 w -(and full) 3502 4114 w -(set) 3943 4114 w -(of) 4137 4114 w -(userland code.) 4280 4114 w -(The) 970 4280 w -(idea) 1206 4280 w -(to) 1468 4280 w -(keep) 1614 4280 w -(a) 1909 4280 w -(standard) 2008 4280 w -(time-sharing) 2516 4280 w -(kernel) 3253 4280 w -(as) 3624 4280 w -(it) 3779 4280 w -(is) 3890 4280 w -(now,) 4016 4280 w -(but) 4309 4280 w -(be) 4525 4280 w -(able) 4694 4280 w -(to) 4956 4280 w -(exploit) 5102 4280 w -(other) 720 4410 w -(cores) 1051 4410 w -(for) 1385 4410 w -(either) 1585 4410 w -(user) 1942 4410 w -(or) 2220 4410 w -(kernel) 2379 4410 w -(intensive) 2759 4410 w -(processes.) 3284 4410 w -(In) 3930 4410 w -(the) 4077 4410 w -(worst) 4295 4410 w -(case,) 4636 4410 w -(the) 4953 4410 w -(time-) 5171 4410 w -(sharing) 720 4540 w -(kernel) 1156 4540 w -(will) 1527 4540 w -(be) 1746 4540 w -(able) 1915 4540 w -(to) 2177 4540 w -(work) 2323 4540 w -(as) 2623 4540 w -(it) 2779 4540 w -(does) 2891 4540 w -(now.) 3184 4540 w -(In) 3513 4540 w -(the) 3652 4540 w -(best) 3862 4540 w -(case,) 4129 4540 w -(applications) 4438 4540 w -(will) 5121 4540 w -(be) 5341 4540 w -(able) 720 4670 w -(to run as fast) 979 4670 w -(as permitted by the) 1724 4670 w -(raw) 2801 4670 w -(hardware.) 3027 4670 w -(NIX) 970 4836 w -(derives) 1188 4836 w -(from) 1607 4836 w -(Plan) 1898 4836 w -(9) 2156 4836 w -(from) 2261 4836 w -(Bell) 2552 4836 w -(Labs.) 2778 4836 w -(Source) 3128 4836 w -(code,) 3521 4836 w -(compiled) 3846 4836 w -(for) 4371 4836 w -(Plan) 4560 4836 w -(9,) 4818 4836 w -(also) 4958 4836 w -(work) 5211 4836 w -(son) 720 4966 w -(NIX.) 948 4966 w -(We) 1237 4966 w -(make) 1431 4966 w -(an) 1757 4966 w -(even) 1923 4966 w -(stronger) 2209 4966 w -(guarantee:) 2698 4966 w -(if) 3306 4966 w -(a) 3416 4966 w -(binary) 3514 4966 w -(worked) 3883 4966 w -(on) 4312 4966 w -(Plan) 4484 4966 w -(9,) 4743 4966 w -(it) 4884 4966 w -(will) 4994 4966 w -(work) 5211 4966 w -(on NIX.) 720 5096 w -(NIX) 970 5262 w -(partitions) 1194 5262 w -(cores) 1748 5262 w -(by) 2076 5262 w -(function,) 2244 5262 w -(hence) 2763 5262 w -(implementing) 3122 5262 w -(a) 3903 5262 w -(type) 4007 5262 w -(of) 4279 5262 w -(heteregeneity.) 4430 5262 w -(The) 5273 5262 w -(basic) 720 5392 w -(x86) 1037 5392 w -(architecture) 1285 5392 w -(has,) 1965 5392 w -(since) 2228 5392 w -(the) 2545 5392 w -(advent) 2759 5392 w -(of) 3160 5392 w -(SMP,) 3311 5392 w -(divided) 3604 5392 w -(CPUs) 4037 5392 w -(into) 4349 5392 w -(two) 4600 5392 w -(basic) 4836 5392 w -(types:) 5152 5392 w -(BSP,) 720 5522 w -(or) 975 5522 w -(Boot) 1123 5522 w -(Strap) 1398 5522 w -(Processor;) 1709 5522 w -(and) 2295 5522 w -(AP,) 2529 5522 w -(or) 2737 5522 w -(Application) 2885 5522 w -(Processor\271.) 3524 5522 w -(In) 4191 5522 w -(a) 4327 5522 w -(sense,) 4424 5522 w -(x86) 4800 5522 w -(systems) 5042 5522 w -(have) 720 5652 w -(had) 1015 5652 w -(heterogeneity) 1260 5652 w -(from) 2042 5652 w -(the) 2344 5652 w -(start,) 2561 5652 w -(although) 2886 5652 w -(in) 3405 5652 w -(keeping) 3551 5652 w -(with) 4022 5652 w -(the) 4294 5652 w -("things) 4511 5652 w -(still) 4931 5652 w -(work") 5170 5652 w -(principle,) 720 5782 w -(it) 1268 5782 w -(was) 1389 5782 w -(not) 1639 5782 w -(visible) 1863 5782 w -(for) 2251 5782 w -(the) 2452 5782 w -(most) 2671 5782 w -(part) 2985 5782 w -(at) 3249 5782 w -(user) 3399 5782 w -(level.) 3678 5782 w -(NIX) 4042 5782 w -(preserves) 4273 5782 w -(this) 4836 5782 w -(distinc\255) 5082 5782 w -(tion, with a) 720 5912 w -(twist: we) 1355 5912 w -(create) 1862 5912 w -(three) 2224 5912 w -(new) 2537 5912 w -(classes of) 2787 5912 w -(cores:) 3344 5912 w -(1) 720 6078 w -(The) 970 6078 w -(first,) 1217 6078 w -(TC,) 1515 6078 w -(is) 1743 6078 w -(a) 1879 6078 w -(time) 1988 6078 w -(sharing) 2273 6078 w -(core.) 2720 6078 w -(The) 3069 6078 w -(BSP) 3317 6078 w -(is) 3550 6078 w -(always) 3687 6078 w -(a) 4088 6078 w -(TC.) 4198 6078 w -(There) 4427 6078 w -(can) 4782 6078 w -(be) 5016 6078 w -(more) 5196 6078 w -(than) 970 6208 w -(one) 1246 6208 w -(TC,) 1481 6208 w -(and) 1699 6208 w -(in) 1935 6208 w -(fact) 2073 6208 w -(a) 2310 6208 w -(system) 2409 6208 w -(can) 2821 6208 w -(consist) 3044 6208 w -(of) 3458 6208 w -(nothing) 3604 6208 w -(but) 4054 6208 w -(TCs,) 4270 6208 w -(as) 4543 6208 w -(determined) 4697 6208 w -(by) 5346 6208 w -(the) 970 6338 w -(needs) 1188 6338 w -(of) 1552 6338 w -(the) 1707 6338 w -(user.) 1925 6338 w -(When) 2238 6338 w -(all) 2578 6338 w -(the) 2750 6338 w -(cores) 2968 6338 w -(are) 3301 6338 w -(TC) 3516 6338 w -(cores,) 3708 6338 w -(behaviour) 4076 6338 w -(is) 4652 6338 w -(not) 4787 6338 w -(different) 5011 6338 w -(from a) 970 6468 w -(SMP) 1356 6468 w -(system.) 1606 6468 w -(2) 720 6634 w -(The) 970 6634 w -(second,) 1245 6634 w -(AC,) 1734 6634 w -(is) 1997 6634 w -(an) 2162 6634 w -(Application) 2368 6634 w -(Core:) 3048 6634 w -(only) 3410 6634 w -(APs) 3711 6634 w -(can) 3981 6634 w -(be) 4243 6634 w -(Application) 4451 6634 w -(Cores.) 5131 6634 w +(2.) 720 3262 w +(The) 888 3262 w +(NIX) 1137 3262 w +(approach:) 1367 3262 w +(core) 1957 3262 w +(roles) 2235 3262 w +11 /LucidaSansUnicode00 f +(There) 720 3428 w +(are) 1074 3428 w +(a) 1291 3428 w +(few) 1401 3428 w +(common) 1638 3428 w +(attributes) 2149 3428 w +(to) 2714 3428 w +(todays) 2871 3428 w +(manycore) 3271 3428 w +(systems.) 3838 3428 w +(The) 4387 3428 w +(systems) 4635 3428 w +(have) 5114 3428 w +(a) 5411 3428 w +(non-uniform) 720 3558 w +(topology.) 1458 3558 w +(Sockets) 2044 3558 w +(contain) 2497 3558 w +(CPUs,) 2938 3558 w +(and) 3290 3558 w +(CPUs) 3536 3558 w +(contain) 3853 3558 w +(cores.) 4294 3558 w +(Each) 4698 3558 w +(socket) 4990 3558 w +(is) 5384 3558 w +(connected) 720 3688 w +(to) 1317 3688 w +(a) 1473 3688 w +(local) 1582 3688 w +(memory,) 1878 3688 w +(and) 2396 3688 w +(can) 2642 3688 w +(reach) 2875 3688 w +(other) 3216 3688 w +(memory) 3548 3688 w +(only) 4032 3688 w +(via) 4305 3688 w +(other) 4504 3688 w +(sockets,) 4836 3688 w +(via) 5322 3688 w +(one) 720 3818 w +(or) 968 3818 w +(more) 1131 3818 w +(hops;) 1458 3818 w +(access) 1804 3818 w +(to) 2202 3818 w +(memory) 2361 3818 w +(is) 2847 3818 w +(hence) 2986 3818 w +(non-uniform.) 3353 3818 w +(Core-to-core) 4164 3818 w +(and) 4930 3818 w +(core-) 5178 3818 w +(to-memory communications time) 720 3948 w +(is non-uniform.) 2545 3948 w +(A) 970 4114 w +(very) 1083 4114 w +(important) 1341 4114 w +(aspect) 1904 4114 w +(of) 2286 4114 w +(these) 2431 4114 w +(designs) 2757 4114 w +(is) 3205 4114 w +(that) 3330 4114 w +(the) 3578 4114 w +(varying) 3786 4114 w +(aspects) 4211 4114 w +(of) 4649 4114 w +(the) 4795 4114 w +(topology) 5004 4114 w +(affect) 720 4244 w +(performance,) 1066 4244 w +(but) 1823 4244 w +(not) 2045 4244 w +(correctness.) 2265 4244 w +(We) 2993 4244 w +(preserve) 3194 4244 w +(an) 3696 4244 w +(old) 3869 4244 w +(but) 4080 4244 w +(very) 4301 4244 w +(important) 4565 4244 w +(princi\255) 5134 4244 w +(ple) 720 4374 w +(in) 937 4374 w +(successful) 1091 4374 w +(computer) 1696 4374 w +(projects,) 2260 4374 w +(both) 2778 4374 w +(hardware) 3077 4374 w +(and) 3627 4374 w +(software:) 3879 4374 w +(things) 4426 4374 w +(that) 4814 4374 w +(worked) 5080 4374 w +(will) 720 4504 w +(still) 938 4504 w +(work.) 1168 4504 w +(We) 1536 4504 w +(are) 1730 4504 w +(trying) 1934 4504 w +(to) 2281 4504 w +(avoid) 2425 4504 w +(the) 2747 4504 w +(high) 2954 4504 w +(risk) 3226 4504 w +(of) 3459 4504 w +(failure) 3603 4504 w +(that) 3980 4504 w +(comes) 4227 4504 w +(with) 4606 4504 w +(clean) 4868 4504 w +(sheet) 5183 4504 w +(designs.) 720 4634 w +(NIX thus begins life) 1236 4634 w +(with a) 2313 4634 w +(working kernel) 2670 4634 w +(and full) 3502 4634 w +(set) 3943 4634 w +(of) 4137 4634 w +(userland code.) 4280 4634 w +(The) 970 4800 w +(idea) 1214 4800 w +(is) 1484 4800 w +(to) 1618 4800 w +(keep) 1772 4800 w +(a) 2075 4800 w +(standard) 2182 4800 w +(time-sharing) 2698 4800 w +(kernel) 3443 4800 w +(as) 3822 4800 w +(it) 3985 4800 w +(is) 4104 4800 w +(now,) 4238 4800 w +(but) 4539 4800 w +(to) 4763 4800 w +(be) 4917 4800 w +(able) 5094 4800 w +(to) 5364 4800 w +(exploit) 720 4930 w +(other) 1133 4930 w +(cores) 1459 4930 w +(for) 1788 4930 w +(either) 1983 4930 w +(user) 2335 4930 w +(or) 2608 4930 w +(kernel) 2762 4930 w +(intensive) 3137 4930 w +(processes.) 3657 4930 w +(In) 4298 4930 w +(the) 4440 4930 w +(worst) 4653 4930 w +(case,) 4989 4930 w +(the) 5301 4930 w +(time-sharing) 720 5060 w +(kernel) 1463 5060 w +(will) 1840 5060 w +(be) 2065 5060 w +(able) 2240 5060 w +(to) 2508 5060 w +(work) 2660 5060 w +(as) 2965 5060 w +(it) 3127 5060 w +(does) 3245 5060 w +(now.) 3544 5060 w +(In) 3879 5060 w +(the) 4024 5060 w +(best) 4240 5060 w +(case,) 4513 5060 w +(applications) 4828 5060 w +(will) 720 5190 w +(be) 936 5190 w +(able) 1102 5190 w +(to run as fast) 1361 5190 w +(as permitted by the) 2106 5190 w +(raw) 3183 5190 w +(hardware.) 3409 5190 w +(NIX) 970 5356 w +(derives) 1209 5356 w +(from) 1649 5356 w +(Plan) 1961 5356 w +(9) 2240 5356 w +(from) 2366 5356 w +(Bell) 2678 5356 w +(Labs.) 2925 5356 w +(Source) 3296 5356 w +(code,) 3710 5356 w +(compiled) 4056 5356 w +(for) 4603 5356 w +(Plan) 4814 5356 w +(9,) 5094 5356 w +(also) 5256 5356 w +(works) 720 5486 w +(on) 1074 5486 w +(NIX.) 1246 5486 w +(We) 1535 5486 w +(make) 1729 5486 w +(an) 2055 5486 w +(even) 2221 5486 w +(stronger) 2507 5486 w +(guarantee:) 2996 5486 w +(if) 3604 5486 w +(a) 3714 5486 w +(binary) 3812 5486 w +(worked) 4181 5486 w +(on) 4610 5486 w +(Plan) 4782 5486 w +(9,) 5041 5486 w +(it) 5182 5486 w +(will) 5291 5486 w +(work) 720 5616 w +(on NIX.) 1016 5616 w +(NIX) 970 5782 w +(partitions) 1194 5782 w +(cores) 1748 5782 w +(by) 2076 5782 w +(function,) 2244 5782 w +(hence) 2763 5782 w +(implementing) 3122 5782 w +(a) 3903 5782 w +(type) 4007 5782 w +(of) 4279 5782 w +(heteregeneity.) 4430 5782 w +(The) 5273 5782 w +(basic) 720 5912 w +(x86) 1037 5912 w +(architecture) 1285 5912 w +(has,) 1965 5912 w +(since) 2228 5912 w +(the) 2545 5912 w +(advent) 2759 5912 w +(of) 3160 5912 w +(SMP,) 3311 5912 w +(divided) 3604 5912 w +(CPUs) 4037 5912 w +(into) 4349 5912 w +(two) 4600 5912 w +(basic) 4836 5912 w +(types:) 5152 5912 w +(BSP,) 720 6042 w +(or) 975 6042 w +(Boot) 1123 6042 w +(Strap) 1398 6042 w +(Processor;) 1709 6042 w +(and) 2295 6042 w +(AP,) 2529 6042 w +(or) 2737 6042 w +(Application) 2885 6042 w +(Processor\271.) 3524 6042 w +(In) 4191 6042 w +(a) 4327 6042 w +(sense,) 4424 6042 w +(x86) 4800 6042 w +(systems) 5042 6042 w +(have) 720 6172 w +(had) 1015 6172 w +(heterogeneity) 1260 6172 w +(from) 2042 6172 w +(the) 2344 6172 w +(start,) 2561 6172 w +(although) 2886 6172 w +(in) 3405 6172 w +(keeping) 3551 6172 w +(with) 4022 6172 w +(the) 4294 6172 w +("things) 4511 6172 w +(still) 4931 6172 w +(work") 5170 6172 w +(principle,) 720 6302 w +(it) 1268 6302 w +(was) 1389 6302 w +(not) 1639 6302 w +(visible) 1863 6302 w +(for) 2251 6302 w +(the) 2452 6302 w +(most) 2671 6302 w +(part) 2985 6302 w +(at) 3249 6302 w +(user) 3399 6302 w +(level.) 3678 6302 w +(NIX) 4042 6302 w +(preserves) 4273 6302 w +(this) 4836 6302 w +(distinc\255) 5082 6302 w +(tion, with a) 720 6432 w +(twist: we) 1355 6432 w +(create) 1862 6432 w +(three) 2224 6432 w +(new) 2537 6432 w +(classes of) 2787 6432 w +(cores:) 3344 6432 w +(1) 720 6598 w +(The) 970 6598 w +(first,) 1217 6598 w +(TC,) 1515 6598 w +(is) 1743 6598 w +(a) 1879 6598 w +(time) 1988 6598 w +(sharing) 2273 6598 w +(core.) 2720 6598 w +(The) 3069 6598 w +(BSP) 3317 6598 w +(is) 3550 6598 w +(always) 3687 6598 w +(a) 4088 6598 w +(TC.) 4198 6598 w +(There) 4427 6598 w +(can) 4782 6598 w +(be) 5016 6598 w +(more) 5196 6598 w +(than) 970 6728 w +(one) 1246 6728 w +(TC,) 1481 6728 w +(and) 1699 6728 w +(in) 1935 6728 w +(fact) 2073 6728 w +(a) 2310 6728 w +(system) 2409 6728 w +(can) 2821 6728 w +(consist) 3044 6728 w +(of) 3458 6728 w +(nothing) 3604 6728 w +(but) 4054 6728 w +(TCs,) 4270 6728 w +(as) 4543 6728 w +(determined) 4697 6728 w +(by) 5346 6728 w 9 /S1 f -(________________) 720 6744 w +(________________) 720 6838 w 9 /LucidaSansUnicode00 f -(\271) 720 6854 w -(It) 792 6854 w -(is) 885 6854 w -(actually) 991 6854 w -(a) 1359 6854 w -(bit) 1443 6854 w -(more) 1593 6854 w -(complex) 1853 6854 w -(than) 2261 6854 w -(that,) 2491 6854 w -(due) 2727 6854 w -(to) 2925 6854 w -(the) 3048 6854 w -(advent) 3222 6854 w -(of) 3550 6854 w -(multicore.) 3673 6854 w -(On) 4179 6854 w -(a) 4340 6854 w -(multi\255) 4425 6854 w -(core) 720 6964 w -(socket,) 940 6964 w -(only) 1283 6964 w -(one) 1499 6964 w -(core) 1692 6964 w -(is) 1912 6964 w -(the) 2016 6964 w -("BSP";) 2186 6964 w -(it) 2463 6964 w -(is) 2553 6964 w -(really) 2656 6964 w -(a) 2923 6964 w -(Boot) 3004 6964 w -(Strap) 3230 6964 w -(Core,) 3487 6964 w -(but) 3751 6964 w -(the) 3928 6964 w -(vendors) 4098 6964 w -(have) 4477 6964 w -(chosen) 720 7074 w -(to) 1058 7074 w -(maintain) 1175 7074 w -(the) 1585 7074 w -(older) 1753 7074 w -(name.) 2007 7074 w +(\271) 720 6948 w +(It) 792 6948 w +(is) 885 6948 w +(actually) 991 6948 w +(a) 1359 6948 w +(bit) 1443 6948 w +(more) 1593 6948 w +(complex) 1853 6948 w +(than) 2261 6948 w +(that,) 2491 6948 w +(due) 2727 6948 w +(to) 2925 6948 w +(the) 3048 6948 w +(advent) 3222 6948 w +(of) 3550 6948 w +(multicore.) 3673 6948 w +(On) 4179 6948 w +(a) 4340 6948 w +(multi\255) 4425 6948 w +(core) 720 7058 w +(socket,) 940 7058 w +(only) 1283 7058 w +(one) 1499 7058 w +(core) 1692 7058 w +(is) 1912 7058 w +(the) 2016 7058 w +("BSP";) 2186 7058 w +(it) 2463 7058 w +(is) 2553 7058 w +(really) 2656 7058 w +(a) 2923 7058 w +(Boot) 3004 7058 w +(Strap) 3230 7058 w +(Core,) 3487 7058 w +(but) 3751 7058 w +(the) 3928 7058 w +(vendors) 4098 7058 w +(have) 4477 7058 w +(chosen) 720 7168 w +(to) 1058 7168 w +(maintain) 1175 7168 w +(the) 1585 7168 w +(older) 1753 7168 w +(name.) 2007 7168 w cleartomark showpage saveobj restore @@ -1552,1215 +1511,1222 @@ mark 3 pagesetup 11 /LucidaSansUnicode00 f -(Application) 970 850 w -(cores) 1639 850 w -(run) 1991 850 w -(applications,) 2238 850 w -(in) 2983 850 w -(a) 3149 850 w -(non-preemptive) 3276 850 w -(mode,) 4210 850 w -(and) 4611 850 w -(never) 4875 850 w -(field) 5236 850 w -(interrupts.) 970 980 w -(In) 1586 980 w -(this) 1740 980 w -(case,) 1991 980 w -(applications) 2315 980 w -(run) 3013 980 w -(as) 3248 980 w -(if) 3419 980 w -(they) 3546 980 w -(had) 3827 980 w -(no) 4078 980 w -(operating) 4266 980 w -(system,) 4832 980 w -(but) 5294 980 w -(they) 970 1110 w -(can) 1236 1110 w -(still) 1459 1110 w -(make) 1690 1110 w -(system) 2017 1110 w -(calls) 2429 1110 w -(and) 2704 1110 w -(rely) 2941 1110 w -(on) 3176 1110 w -(OS) 3350 1110 w -(services) 3534 1110 w -(as) 3999 1110 w -(provided) 4155 1110 w -(by) 4664 1110 w -(other) 4829 1110 w -(cores.) 5151 1110 w -(But) 970 1240 w -(for) 1202 1240 w -(performance,) 1414 1240 w -(running) 2186 1240 w -(on) 2661 1240 w -(ACs) 2854 1240 w -(is) 3120 1240 w -(transparent) 3266 1240 w -(to) 3941 1240 w -(applications,) 4107 1240 w -(unless) 4844 1240 w -(they) 5244 1240 w -(want) 970 1370 w -(to take) 1260 1370 w -(control) 1666 1370 w -(of) 2077 1370 w -(this.) 2220 1370 w -(3) 720 1536 w -(The) 970 1536 w -(third,) 1215 1536 w -(KC,) 1551 1536 w -(is) 1780 1536 w -(a) 1914 1536 w -(Kernel) 2021 1536 w -(Core.) 2408 1536 w -(Kernel) 2774 1536 w -(Cores) 3161 1536 w -(can) 3513 1536 w -(be) 3744 1536 w -(created) 3921 1536 w -(under) 4364 1536 w -(control) 4723 1536 w -(of) 5146 1536 w -(the) 5301 1536 w -(TC.) 970 1666 w -(KCs) 1187 1666 w -(do) 1428 1666 w -(nothing) 1601 1666 w -(but) 2050 1666 w -(run) 2265 1666 w -(OS) 2483 1666 w -(tasks) 2665 1666 w -(for) 2980 1666 w -(the) 3170 1666 w -(TC.) 3378 1666 w -(A) 3595 1666 w -(KC) 3708 1666 w -(might,) 3893 1666 w -(for) 4276 1666 w -(example,) 4465 1666 w -(run) 4991 1666 w -(a) 5208 1666 w -(file) 5305 1666 w -(system.) 970 1796 w -(KCs never run user mode) 1449 1796 w -(code.) 2834 1796 w -(Typical) 3193 1796 w -(usages for KCs are) 3604 1796 w -(to service) 4640 1796 w -(inter\255) 5188 1796 w -(rupts) 970 1926 w -(from) 1287 1926 w -(device) 1580 1926 w -(drivers) 1956 1926 w -(and) 2360 1926 w -(to) 2596 1926 w -(perform) 2742 1926 w -(system) 3211 1926 w -(calls) 3623 1926 w -(requested) 3898 1926 w -(to,) 4470 1926 w -(otherwise) 4650 1926 w -(over\255) 5205 1926 w -(loaded, TCs.) 970 2056 w -(Cores) 720 2222 w -(hence) 1078 2222 w -(have) 1446 2222 w -(roles.) 1746 2222 w -(Part) 2130 2222 w -(of) 2390 2222 w -(the) 2551 2222 w -(motivation) 2775 2222 w -(for) 3396 2222 w -(the) 3602 2222 w -(creation) 3826 2222 w -(of) 4311 2222 w -(these) 4472 2222 w -(roles) 4814 2222 w -(comes) 5129 2222 w -(from) 720 2352 w -(discussions) 1016 2352 w -(with) 1673 2352 w -(vendors.) 1940 2352 w -(While) 2475 2352 w -(cores) 2805 2352 w -(on) 3132 2352 w -(current) 3308 2352 w -(systems) 3734 2352 w -(are) 4204 2352 w -(all) 4412 2352 w -(the) 4577 2352 w -(same) 4788 2352 w -(\255with) 5109 2352 w -(a) 5411 2352 w -(few) 720 2482 w -(exceptions,) 952 2482 w -(such) 1612 2482 w -(as) 1905 2482 w -(Cell\255) 2067 2482 w -(there) 2350 2482 w -(is) 2673 2482 w -(no) 2806 2482 w -(guarantee) 2986 2482 w -(of) 3567 2482 w -(such) 3720 2482 w -(homogeneity) 4013 2482 w -(in) 4752 2482 w -(future) 4897 2482 w -(sys\255) 5267 2482 w -(tems.) 720 2612 w -(In) 1097 2612 w -(fact,) 1243 2612 w -(heterogeneity) 1523 2612 w -(is) 2304 2612 w -(almost) 2438 2612 w -(guaranteed) 2843 2612 w -(by) 3494 2612 w -(a) 3666 2612 w -(simple) 3773 2612 w -(fact:) 4171 2612 w -(systems) 4450 2612 w -(with) 4925 2612 w -(1024) 5196 2612 w -(cores) 720 2742 w -(will) 1050 2742 w -(not) 1276 2742 w -(need) 1497 2742 w -(to) 1803 2742 w -(have) 1956 2742 w -(all) 2249 2742 w -(1024) 2419 2742 w -(cores) 2740 2742 w -(running) 3071 2742 w -(the) 3533 2742 w -(kernel.) 3749 2742 w -(Designers) 4197 2742 w -(see) 4774 2742 w -(potential) 4999 2742 w -(for) 720 2872 w -(die) 922 2872 w -(space) 1134 2872 w -(and) 1487 2872 w -(power) 1734 2872 w -(savings) 2110 2872 w -(if,) 2556 2872 w -(say,) 2712 2872 w -(a) 2969 2872 w -(system) 3078 2872 w -(with) 3500 2872 w +(the) 970 850 w +(needs) 1188 850 w +(of) 1552 850 w +(the) 1707 850 w +(user.) 1925 850 w +(When) 2238 850 w +(all) 2578 850 w +(the) 2750 850 w +(cores) 2968 850 w +(are) 3301 850 w +(TC) 3516 850 w +(cores,) 3708 850 w +(behaviour) 4076 850 w +(is) 4652 850 w +(not) 4787 850 w +(different) 5011 850 w +(from a) 970 980 w +(SMP) 1356 980 w +(system.) 1606 980 w +(2) 720 1146 w +(The) 970 1146 w +(second,) 1206 1146 w +(AC,) 1656 1146 w +(is) 1880 1146 w +(an) 2005 1146 w +(application) 2172 1146 w +(core:) 2798 1146 w +(only) 3101 1146 w +(APs) 3363 1146 w +(can) 3594 1146 w +(be) 3817 1146 w +(Application) 3986 1146 w +(Cores.) 4627 1146 w +(Applica\255) 5041 1146 w +(tion) 970 1276 w +(cores) 1223 1276 w +(run) 1554 1276 w +(applications,) 1780 1276 w +(in) 2504 1276 w +(a) 2649 1276 w +(non-preemptive) 2755 1276 w +(mode,) 3668 1276 w +(and) 4048 1276 w +(never) 4291 1276 w +(field) 4630 1276 w +(interrupts.) 4910 1276 w +(In) 970 1406 w +(this) 1113 1406 w +(case,) 1353 1406 w +(applications) 1666 1406 w +(run) 2353 1406 w +(as) 2577 1406 w +(if) 2737 1406 w +(they) 2853 1406 w +(had) 3125 1406 w +(no) 3367 1406 w +(operating) 3546 1406 w +(system,) 4103 1406 w +(but) 4556 1406 w +(they) 4778 1406 w +(can) 5050 1406 w +(still) 5279 1406 w +(make) 970 1536 w +(system) 1303 1536 w +(calls) 1721 1536 w +(and) 2001 1536 w +(rely) 2242 1536 w +(on) 2481 1536 w +(OS) 2659 1536 w +(services) 2847 1536 w +(as) 3316 1536 w +(provided) 3476 1536 w +(by) 3989 1536 w +(other) 4158 1536 w +(cores.) 4484 1536 w +(But) 4848 1536 w +(for) 5064 1536 w +(per\255) 5260 1536 w +(formance,) 970 1666 w +(running) 1553 1666 w +(on) 2016 1666 w +(ACs) 2197 1666 w +(is) 2451 1666 w +(transparent) 2585 1666 w +(to) 3248 1666 w +(applications,) 3402 1666 w +(unless) 4127 1666 w +(they) 4515 1666 w +(want) 4789 1666 w +(to) 5090 1666 w +(take) 5244 1666 w +(control) 970 1796 w +(of) 1381 1796 w +(this feature.) 1524 1796 w +(3) 720 1962 w +(The) 970 1962 w +(third, KC, is a) 1204 1962 w +(kernel) 1966 1962 w +(core.) 2334 1962 w +(Kernel) 2669 1962 w +(cores can be) 3045 1962 w +(created under control) 3752 1962 w +(of) 4941 1962 w +(the) 5085 1962 w +(TC.) 5292 1962 w +(KCs) 970 2092 w +(do) 1210 2092 w +(nothing) 1382 2092 w +(but) 1830 2092 w +(run) 2044 2092 w +(OS) 2261 2092 w +(tasks) 2442 2092 w +(for the) 2756 2092 w +(TC. A) 3150 2092 w +(KC) 3476 2092 w +(might, for example, run a) 3659 2092 w +(file) 5065 2092 w +(sys\255) 5267 2092 w +(tem) 970 2222 w +(call.) 1229 2222 w +(KCs) 1534 2222 w +(never) 1792 2222 w +(run) 2140 2222 w +(user) 2375 2222 w +(mode) 2660 2222 w +(code.) 3014 2222 w +(Typical) 3392 2222 w +(usages) 3823 2222 w +(for) 4249 2222 w +(KCs) 4457 2222 w +(are) 4716 2222 w +(to) 4939 2222 w +(service) 5102 2222 w +(interrupts) 970 2352 w +(from) 1540 2352 w +(device) 1838 2352 w +(drivers) 2219 2352 w +(and) 2628 2352 w +(to) 2869 2352 w +(perform) 3020 2352 w +(system) 3494 2352 w +(calls) 3911 2352 w +(requested) 4191 2352 w +(to,) 4768 2352 w +(otherwise) 4954 2352 w +(overloaded, TCs.) 970 2482 w +(Cores) 720 2648 w +(hence) 1078 2648 w +(have) 1446 2648 w +(roles.) 1746 2648 w +(Part) 2130 2648 w +(of) 2390 2648 w +(the) 2551 2648 w +(motivation) 2775 2648 w +(for) 3396 2648 w +(the) 3602 2648 w +(creation) 3826 2648 w +(of) 4311 2648 w +(these) 4472 2648 w +(roles) 4814 2648 w +(comes) 5129 2648 w +(from) 720 2778 w +(discussions) 1016 2778 w +(with) 1673 2778 w +(vendors.) 1940 2778 w +(While) 2475 2778 w +(cores) 2805 2778 w +(on) 3132 2778 w +(current) 3308 2778 w +(systems) 3734 2778 w +(are) 4204 2778 w +(all) 4412 2778 w +(the) 4577 2778 w +(same) 4788 2778 w +(\255with) 5109 2778 w +(a) 5411 2778 w +(few) 720 2908 w +(exceptions,) 952 2908 w +(such) 1612 2908 w +(as) 1905 2908 w +(Cell\255) 2067 2908 w +(there) 2350 2908 w +(is) 2673 2908 w +(no) 2806 2908 w +(guarantee) 2986 2908 w +(of) 3567 2908 w +(such) 3720 2908 w +(homogeneity) 4013 2908 w +(in) 4752 2908 w +(future) 4897 2908 w +(sys\255) 5267 2908 w +(tems.) 720 3038 w +(In) 1097 3038 w +(fact,) 1243 3038 w +(heterogeneity) 1523 3038 w +(is) 2304 3038 w +(almost) 2438 3038 w +(guaranteed) 2843 3038 w +(by) 3494 3038 w +(a) 3666 3038 w +(simple) 3773 3038 w +(fact:) 4171 3038 w +(systems) 4450 3038 w +(with) 4925 3038 w +(1024) 5196 3038 w +(cores) 720 3168 w +(will) 1050 3168 w +(not) 1276 3168 w +(need) 1497 3168 w +(to) 1803 3168 w +(have) 1956 3168 w +(all) 2249 3168 w +(1024) 2419 3168 w +(cores) 2740 3168 w +(running) 3071 3168 w +(the) 3533 3168 w +(kernel.) 3749 3168 w +(Designers) 4197 3168 w +(see) 4774 3168 w +(potential) 4999 3168 w +(for) 720 3298 w +(die) 922 3298 w +(space) 1134 3298 w +(and) 1487 3298 w +(power) 1734 3298 w +(savings) 2110 3298 w +(if,) 2556 3298 w +(say,) 2712 3298 w +(a) 2969 3298 w +(system) 3078 3298 w +(with) 3500 3298 w 11 /LucidaSans-Italic f -(N) 3774 2872 w -11 /LucidaSansUnicode00 f -(cores) 3903 2872 w -(has) 4237 2872 w -(only) 4470 2872 w +(N) 3774 3298 w +11 /LucidaSansUnicode00 f +(cores) 3903 3298 w +(has) 4237 3298 w +(only) 4470 3298 w 11 /LucidaSans-Italic f -(sqrt) 4742 2872 w -11 /LucidaSansUnicode00 f -(\() 4967 2872 w +(sqrt) 4742 3298 w +11 /LucidaSansUnicode00 f +(\() 4967 3298 w 11 /LucidaSans-Italic f -(N) 5012 2872 w -11 /LucidaSansUnicode00 f -(\)) 5102 2872 w -(cores) 5186 2872 w -(complex) 720 3002 w -(enough) 1223 3002 w -(to) 1672 3002 w -(run) 1828 3002 w -(an) 2057 3002 w -(operating) 2234 3002 w -(system) 2795 3002 w -(and) 3218 3002 w -(manage) 3465 3002 w -(interrupts) 3936 3002 w -(and) 4512 3002 w -(I/O.) 4759 3002 w -(At) 5054 3002 w -(least) 5220 3002 w -(one) 720 3132 w -(vendor) 958 3132 w -(we) 1367 3132 w -(have) 1554 3132 w -(spoken) 1842 3132 w -(with) 2268 3132 w -(evinced) 2534 3132 w -(great) 2980 3132 w -(dismay) 3297 3132 w -(at) 3714 3132 w -(the) 3856 3132 w -(idea) 4067 3132 w -(of) 4331 3132 w -(taking) 4479 3132 w -(a) 4853 3132 w -(manycore) 4954 3132 w -(system and treating it) 720 3262 w -(as a) 1923 3262 w -(traditional) 2171 3262 w -(SMP) 2755 3262 w -(system\262.) 3005 3262 w -(The) 970 3428 w -(BSP) 1211 3428 w -(behaves) 1437 3428 w -(as) 1914 3428 w -(a) 2073 3428 w -(TC) 2176 3428 w -(and) 2363 3428 w -(coordinates) 2603 3428 w -(the) 3269 3428 w -(activity) 3482 3428 w -(of) 3901 3428 w -(other) 4051 3428 w -(cores) 4377 3428 w -(in) 4706 3428 w -(the) 4849 3428 w -(system.) 5063 3428 w -(After) 720 3558 w -(start-up,) 1028 3558 w -(ACs) 1551 3558 w -(sit) 1801 3558 w -(in) 1972 3558 w -(a) 2114 3558 w -(simple) 2217 3558 w -(command) 2612 3558 w -(loop,) 3179 3558 w +(N) 5012 3298 w +11 /LucidaSansUnicode00 f +(\)) 5102 3298 w +(cores) 5186 3298 w +(complex) 720 3428 w +(enough) 1223 3428 w +(to) 1672 3428 w +(run) 1828 3428 w +(an) 2057 3428 w +(operating) 2234 3428 w +(system) 2795 3428 w +(and) 3218 3428 w +(manage) 3465 3428 w +(interrupts) 3936 3428 w +(and) 4512 3428 w +(I/O.) 4759 3428 w +(At) 5054 3428 w +(least) 5220 3428 w +(one) 720 3558 w +(vendor) 958 3558 w +(we) 1367 3558 w +(have) 1554 3558 w +(spoken) 1842 3558 w +(with) 2268 3558 w +(evinced) 2534 3558 w +(great) 2980 3558 w +(dismay) 3297 3558 w +(at) 3714 3558 w +(the) 3856 3558 w +(idea) 4067 3558 w +(of) 4331 3558 w +(taking) 4479 3558 w +(a) 4853 3558 w +(manycore) 4954 3558 w +(system and treating it) 720 3688 w +(as a) 1923 3688 w +(traditional) 2171 3688 w +(SMP) 2755 3688 w +(system\262.) 3005 3688 w +(The) 970 3854 w +(BSP) 1211 3854 w +(behaves) 1437 3854 w +(as) 1914 3854 w +(a) 2073 3854 w +(TC) 2176 3854 w +(and) 2363 3854 w +(coordinates) 2603 3854 w +(the) 3269 3854 w +(activity) 3482 3854 w +(of) 3901 3854 w +(other) 4051 3854 w +(cores) 4377 3854 w +(in) 4706 3854 w +(the) 4849 3854 w +(system.) 5063 3854 w +(After) 720 3984 w +(start-up,) 1028 3984 w +(ACs) 1551 3984 w +(sit) 1801 3984 w +(in) 1972 3984 w +(a) 2114 3984 w +(simple) 2217 3984 w +(command) 2612 3984 w +(loop,) 3179 3984 w 11 /LucidaSans-Italic f -(acsched) 3491 3558 w -11 /LucidaSansUnicode00 f -(,) 3915 3558 w -(waiting) 3992 3558 w -(for) 4421 3558 w -(commands,) 4616 3558 w -(and) 5274 3558 w -(executing) 720 3688 w -(them) 1291 3688 w -(as) 1611 3688 w -(instructed.) 1775 3688 w -(KCs) 2430 3688 w -(do) 2681 3688 w -(the) 2864 3688 w -(same,) 3083 3688 w -(but) 3447 3688 w -(they) 3673 3688 w -(are) 3949 3688 w -(never) 4165 3688 w -(requested) 4507 3688 w -(to) 5089 3688 w -(exe\255) 5245 3688 w -(cute) 720 3818 w -(user) 997 3818 w -(code.) 1278 3818 w -(TCs) 1652 3818 w -(execute) 1903 3818 w -(standard) 2371 3818 w -(time-sharing) 2891 3818 w -(kernels,) 3640 3818 w -(similar) 4114 3818 w -(to) 4524 3818 w -(a) 4682 3818 w -(conventional) 4793 3818 w -(SMP) 720 3948 w -(system.) 970 3948 w -gsave -newpath -2232 4738 m +(acsched) 3491 3984 w +11 /LucidaSansUnicode00 f +(,) 3915 3984 w +(waiting) 3992 3984 w +(for) 4421 3984 w +(commands,) 4616 3984 w +(and) 5274 3984 w +(executing) 720 4114 w +(them) 1291 4114 w +(as) 1611 4114 w +(instructed.) 1775 4114 w +(KCs) 2430 4114 w +(do) 2681 4114 w +(the) 2864 4114 w +(same,) 3083 4114 w +(but) 3447 4114 w +(they) 3673 4114 w +(are) 3949 4114 w +(never) 4165 4114 w +(requested) 4507 4114 w +(to) 5089 4114 w +(exe\255) 5245 4114 w +(cute) 720 4244 w +(user) 997 4244 w +(code.) 1278 4244 w +(TCs) 1652 4244 w +(execute) 1903 4244 w +(standard) 2371 4244 w +(time-sharing) 2891 4244 w +(kernels,) 3640 4244 w +(similar) 4114 4244 w +(to) 4524 4244 w +(a) 4682 4244 w +(conventional) 4793 4244 w +(SMP) 720 4374 w +(system.) 970 4374 w +gsave +newpath +2232 5164 m /inpath true def 0.5 setgray -2160 4198 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2196 4306 m +2160 4624 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2196 4732 m /inpath true def 0.5 setgray -2160 4342 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2196 4450 m +2160 4768 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2196 4876 m /inpath true def 0.5 setgray -2160 4486 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2196 4594 m +2160 4912 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2196 5020 m /inpath true def 0.5 setgray -2160 4630 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2196 4738 m +2160 5056 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2196 5164 m /inpath true def 0.5 setgray -2160 4774 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2196 4882 m +2160 5200 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2196 5308 m /inpath true def 0.5 setgray -2160 4918 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2196 5026 m +2160 5344 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2196 5452 m /inpath true def 0.5 setgray -2160 5062 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2196 5170 m +2160 5488 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2196 5596 m /inpath true def 0.5 setgray -2160 5206 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2376 4738 m +2160 5632 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2376 5164 m /inpath true def 0.5 setgray -2304 4198 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2340 4306 m +2304 4624 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2340 4732 m /inpath true def 0.5 setgray -2304 4342 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2340 4450 m +2304 4768 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2340 4876 m /inpath true def 0.5 setgray -2304 4486 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2340 4594 m +2304 4912 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2340 5020 m /inpath true def 0.5 setgray -2304 4630 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2340 4738 m +2304 5056 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2340 5164 m /inpath true def 0.5 setgray -2304 4774 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2340 4882 m +2304 5200 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2340 5308 m /inpath true def 0.5 setgray -2304 4918 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2340 5026 m +2304 5344 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2340 5452 m /inpath true def 0.5 setgray -2304 5062 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2340 5170 m +2304 5488 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2340 5596 m /inpath true def 0.5 setgray -2304 5206 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2520 4738 m +2304 5632 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2520 5164 m /inpath true def 0.5 setgray -2448 4198 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2484 4306 m +2448 4624 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2484 4732 m /inpath true def 0.5 setgray -2448 4342 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2484 4450 m +2448 4768 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2484 4876 m /inpath true def 0.5 setgray -2448 4486 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2484 4594 m +2448 4912 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2484 5020 m /inpath true def 0.5 setgray -2448 4630 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2484 4738 m +2448 5056 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2484 5164 m /inpath true def 0.5 setgray -2448 4774 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2484 4882 m +2448 5200 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2484 5308 m /inpath true def 0.5 setgray -2448 4918 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2484 5026 m +2448 5344 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2484 5452 m /inpath true def 0.5 setgray -2448 5062 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2484 5170 m +2448 5488 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2484 5596 m /inpath true def 0.5 setgray -2448 5206 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2664 4738 m +2448 5632 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2664 5164 m /inpath true def 1 setgray -2592 4198 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2628 4306 m +2592 4624 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2628 4732 m /inpath true def 1 setgray -2592 4342 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2628 4450 m +2592 4768 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2628 4876 m /inpath true def 1 setgray -2592 4486 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2628 4594 m +2592 4912 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2628 5020 m /inpath true def 1 setgray -2592 4630 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2628 4738 m +2592 5056 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2628 5164 m /inpath true def 1 setgray -2592 4774 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2628 4882 m +2592 5200 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2628 5308 m /inpath true def 1 setgray -2592 4918 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2628 5026 m +2592 5344 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2628 5452 m /inpath true def 1 setgray -2592 5062 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2628 5170 m +2592 5488 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2628 5596 m /inpath true def 1 setgray -2592 5206 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2808 4738 m +2592 5632 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2808 5164 m /inpath true def 1 setgray -2736 4198 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2772 4306 m +2736 4624 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2772 4732 m /inpath true def 1 setgray -2736 4342 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2772 4450 m +2736 4768 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2772 4876 m /inpath true def 1 setgray -2736 4486 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2772 4594 m +2736 4912 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2772 5020 m /inpath true def 1 setgray -2736 4630 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2772 4738 m +2736 5056 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2772 5164 m /inpath true def 1 setgray -2736 4774 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2772 4882 m +2736 5200 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2772 5308 m /inpath true def 1 setgray -2736 4918 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2772 5026 m +2736 5344 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2772 5452 m /inpath true def 1 setgray -2736 5062 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2772 5170 m +2736 5488 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2772 5596 m /inpath true def 1 setgray -2736 5206 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2952 4738 m +2736 5632 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2952 5164 m /inpath true def 0.3 setgray -2880 4198 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2916 4306 m +2880 4624 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2916 4732 m /inpath true def 0.3 setgray -2880 4342 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2916 4450 m +2880 4768 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2916 4876 m /inpath true def 0.3 setgray -2880 4486 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2916 4594 m +2880 4912 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2916 5020 m /inpath true def 0.3 setgray -2880 4630 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2916 4738 m +2880 5056 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2916 5164 m /inpath true def 0.3 setgray -2880 4774 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2916 4882 m +2880 5200 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2916 5308 m /inpath true def 0.3 setgray -2880 4918 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2916 5026 m +2880 5344 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2916 5452 m /inpath true def 0.3 setgray -2880 5062 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -2916 5170 m +2880 5488 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +2916 5596 m /inpath true def 0.3 setgray -2880 5206 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3096 4738 m +2880 5632 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3096 5164 m /inpath true def 0.3 setgray -3024 4198 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3060 4306 m +3024 4624 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3060 4732 m /inpath true def 0.3 setgray -3024 4342 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3060 4450 m +3024 4768 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3060 4876 m /inpath true def 0.3 setgray -3024 4486 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3060 4594 m +3024 4912 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3060 5020 m /inpath true def 0.3 setgray -3024 4630 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3060 4738 m +3024 5056 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3060 5164 m /inpath true def 0.3 setgray -3024 4774 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3060 4882 m +3024 5200 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3060 5308 m /inpath true def 0.3 setgray -3024 4918 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3060 5026 m +3024 5344 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3060 5452 m /inpath true def 0.3 setgray -3024 5062 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3060 5170 m +3024 5488 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3060 5596 m /inpath true def 0.3 setgray -3024 5206 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3240 4738 m +3024 5632 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3240 5164 m /inpath true def 0.3 setgray -3168 4198 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3204 4306 m +3168 4624 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3204 4732 m /inpath true def 0.3 setgray -3168 4342 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3204 4450 m +3168 4768 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3204 4876 m /inpath true def 0.3 setgray -3168 4486 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3204 4594 m +3168 4912 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3204 5020 m /inpath true def 0.3 setgray -3168 4630 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3204 4738 m +3168 5056 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3204 5164 m /inpath true def 0.3 setgray -3168 4774 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3204 4882 m +3168 5200 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3204 5308 m /inpath true def 0.3 setgray -3168 4918 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3204 5026 m +3168 5344 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3204 5452 m /inpath true def 0.3 setgray -3168 5062 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3204 5170 m +3168 5488 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3204 5596 m /inpath true def 0.3 setgray -3168 5206 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3384 4738 m +3168 5632 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3384 5164 m /inpath true def 0.3 setgray -3312 4198 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3348 4306 m +3312 4624 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3348 4732 m /inpath true def 0.3 setgray -3312 4342 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3348 4450 m +3312 4768 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3348 4876 m /inpath true def 0.3 setgray -3312 4486 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3348 4594 m +3312 4912 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3348 5020 m /inpath true def 0.3 setgray -3312 4630 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3348 4738 m +3312 5056 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3348 5164 m /inpath true def 0.3 setgray -3312 4774 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3348 4882 m +3312 5200 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3348 5308 m /inpath true def 0.3 setgray -3312 4918 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3348 5026 m +3312 5344 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3348 5452 m /inpath true def 0.3 setgray -3312 5062 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3348 5170 m +3312 5488 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3348 5596 m /inpath true def 0.3 setgray -3312 5206 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3528 4738 m +3312 5632 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3528 5164 m /inpath true def 0.3 setgray -3456 4198 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3492 4306 m +3456 4624 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3492 4732 m /inpath true def 0.3 setgray -3456 4342 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3492 4450 m +3456 4768 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3492 4876 m /inpath true def 0.3 setgray -3456 4486 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3492 4594 m +3456 4912 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3492 5020 m /inpath true def 0.3 setgray -3456 4630 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3492 4738 m +3456 5056 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3492 5164 m /inpath true def 0.3 setgray -3456 4774 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3492 4882 m +3456 5200 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3492 5308 m /inpath true def 0.3 setgray -3456 4918 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3492 5026 m +3456 5344 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3492 5452 m /inpath true def 0.3 setgray -3456 5062 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3492 5170 m +3456 5488 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3492 5596 m /inpath true def 0.3 setgray -3456 5206 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -gsave -newpath -3996 4342 m +3456 5632 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +gsave +newpath +3996 4768 m /inpath true def 0.5 setgray -3960 4306 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -(TC) 4067 4328 w -gsave -newpath -3996 4774 m +3960 4732 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +(TC) 4067 4754 w +gsave +newpath +3996 5200 m /inpath true def 1 setgray -3960 4738 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -(KC) 4067 4760 w -gsave -newpath -3996 5206 m +3960 5164 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +(KC) 4067 5186 w +gsave +newpath +3996 5632 m /inpath true def 0.3 setgray -3960 5170 72 72 De - gsave eofill grestore 0 setgray stroke -grestore -/inpath false def -(AC) 4067 5192 w +3960 5596 72 72 De + gsave eofill grestore 0 setgray stroke +grestore +/inpath false def +(AC) 4067 5618 w 10 /LucidaSans-Demi f -(Figure 1) 1314 5578 w +(Figure 1) 1314 6004 w 10 /LucidaSansUnicode00 f -(Different) 1800 5578 w -(cores) 2298 5578 w -(have) 2626 5578 w -(different) 2919 5578 w -(roles.) 3405 5578 w -(TCs) 3743 5578 w -(are) 3994 5578 w -(Time-Sharing) 4214 5578 w -(cores;) 1314 5698 w -(KCs) 1652 5698 w -(are) 1883 5698 w -(Kernel) 2081 5698 w -(cores;) 2436 5698 w -(ACs) 2774 5698 w -(are) 3009 5698 w -(Application) 3207 5698 w -(cores.) 3801 5698 w -(The) 4139 5698 w -(BSP) 4366 5698 w -(\(a) 4579 5698 w -(TC\)) 4713 5698 w -(coordinates the roles for other cores, which may change during time.) 1314 5818 w -11 /LucidaSansUnicode00 f -(Therefore,) 970 6044 w -(there) 1569 6044 w -(are) 1890 6044 w -(two) 2101 6044 w -(different) 2337 6044 w -(types) 2841 6044 w -(of) 3169 6044 w -(kernel) 3321 6044 w -(in) 3698 6044 w -(the) 3842 6044 w -(system:) 4057 6044 w -(TCs) 4510 6044 w -(and) 4755 6044 w -(KCs) 4997 6044 w -(exe\255) 5245 6044 w -(cute) 720 6174 w -(the) 994 6174 w -(standard) 1212 6174 w -(time-sharing) 1729 6174 w -(kernel.) 2475 6174 w -(ACs) 2890 6174 w -(execute) 3145 6174 w -(almost) 3610 6174 w -(without) 4016 6174 w -(a) 4465 6174 w -(kernel,) 4573 6174 w -(but) 4988 6174 w -(for) 5212 6174 w -(a) 5411 6174 w -(few) 720 6304 w -(exception) 949 6304 w -(handlers) 1514 6304 w -(and) 2016 6304 w -(their) 2256 6304 w -(main) 2546 6304 w -(scheduling) 2851 6304 w -(loop,) 3472 6304 w +(Different) 1800 6004 w +(cores) 2298 6004 w +(have) 2626 6004 w +(different) 2919 6004 w +(roles.) 3405 6004 w +(TCs) 3743 6004 w +(are) 3994 6004 w +(Time-Sharing) 4214 6004 w +(cores;) 1314 6124 w +(KCs) 1652 6124 w +(are) 1883 6124 w +(Kernel) 2081 6124 w +(cores;) 2436 6124 w +(ACs) 2774 6124 w +(are) 3009 6124 w +(Application) 3207 6124 w +(cores.) 3801 6124 w +(The) 4139 6124 w +(BSP) 4366 6124 w +(\(a) 4579 6124 w +(TC\)) 4713 6124 w +(coordinates the roles for other cores, which may change during time.) 1314 6244 w +11 /LucidaSansUnicode00 f +(Therefore,) 720 6470 w +(there) 1323 6470 w +(are) 1648 6470 w +(two) 1863 6470 w +(different) 2104 6470 w +(types) 2613 6470 w +(of) 2946 6470 w +(kernel) 3102 6470 w +(in) 3483 6470 w +(the) 3631 6470 w +(system:) 3850 6470 w +(TCs) 4307 6470 w +(and) 4556 6470 w +(KCs) 4802 6470 w +(execute) 5054 6470 w +(the) 720 6600 w +(standard) 941 6600 w +(time-sharing) 1461 6600 w +(kernel.) 2210 6600 w +(ACs) 2628 6600 w +(execute) 2886 6600 w +(almost) 3354 6600 w +(without) 3763 6600 w +(a) 4215 6600 w +(kernel,) 4326 6600 w +(but) 4744 6600 w +(for) 4972 6600 w +(a) 5174 6600 w +(few) 5284 6600 w +(exception) 720 6730 w +(handlers) 1306 6730 w +(and) 1829 6730 w +(their) 2089 6730 w +(main) 2399 6730 w +(scheduling) 2725 6730 w +(loop,) 3367 6730 w 11 /LucidaSans-Italic f -(acsched) 3784 6304 w -11 /LucidaSansUnicode00 f -(.) 4208 6304 w -(This) 4320 6304 w -(has) 4587 6304 w -(a) 4814 6304 w -(significant) 4917 6304 w -(impact) 720 6434 w -(on) 1124 6434 w -(the) 1302 6434 w -(interference) 1516 6434 w -(caused) 2203 6434 w -(by) 2617 6434 w -(the) 2785 6434 w -(system) 2998 6434 w -(to) 3414 6434 w -(application) 3564 6434 w -(code,) 4194 6434 w -(which) 4525 6434 w -(is) 4876 6434 w -(neggligi\255) 5006 6434 w -(ble) 720 6564 w -(on) 934 6564 w -(ACs.) 1120 6564 w -(Nevertheless,) 1414 6564 w -(ACs) 2184 6564 w -(may) 2443 6564 w -(execute) 2714 6564 w -(arbitrary) 3184 6564 w -(kernel) 3692 6564 w -(code) 4077 6564 w -(as) 4383 6564 w -(found) 4552 6564 w -(in) 4917 6564 w -(the) 5069 6564 w -(TC,) 5292 6564 w -(because) 720 6694 w -(of) 1189 6694 w -(the) 1332 6694 w -(shared memory assumption, if) 1538 6694 w -(the) 3202 6694 w -(architecture) 3408 6694 w -(is compatible.) 4080 6694 w +(acsched) 3700 6730 w +11 /LucidaSansUnicode00 f +(.) 4124 6730 w +(This) 4257 6730 w +(has) 4545 6730 w +(a) 4793 6730 w +(significant) 4917 6730 w +(impact) 720 6860 w +(on) 1166 6860 w +(the) 1386 6860 w +(interference) 1642 6860 w +(caused) 2371 6860 w +(by) 2828 6860 w +(the) 3039 6860 w +(system) 3295 6860 w +(to) 3754 6860 w +(application) 3946 6860 w +(code,) 4618 6860 w +(which) 4991 6860 w +(is) 5384 6860 w 9 /S1 f -(________________) 720 6850 w +(________________) 720 6970 w 9 /LucidaSansUnicode00 f -(\262) 720 6960 w -(Direct) 791 6960 w -(quote:) 1084 6960 w +(\262) 720 7080 w +(Direct) 791 7080 w +(quote:) 1084 7080 w 9 /LucidaSansUnicode20 f -(\030\030) 1397 6960 w +(\030\030) 1397 7080 w 9 /LucidaSansUnicode00 f -(It) 1455 6960 w -(would) 1547 6960 w -(be) 1843 6960 w -(a) 1983 6960 w -(terrible) 2066 6960 w -(waste) 2415 6960 w -(to) 2696 6960 w -(run) 2817 6960 w -(Linux) 2999 6960 w -(on) 3273 6960 w -(every) 3418 6960 w -(core) 3683 6960 w -(of) 3905 6960 w -(this) 4027 6960 w -(processor,) 4222 6960 w -(but) 720 7070 w -(that) 895 7070 w +(It) 1455 7080 w +(would) 1547 7080 w +(be) 1843 7080 w +(a) 1983 7080 w +(terrible) 2066 7080 w +(waste) 2415 7080 w +(to) 2696 7080 w +(run) 2817 7080 w +(Linux) 2999 7080 w +(on) 3273 7080 w +(every) 3418 7080 w +(core) 3683 7080 w +(of) 3905 7080 w +(this) 4027 7080 w +(processor,) 4222 7080 w +(but) 720 7190 w +(that) 895 7190 w 9 /LucidaSansUnicode20 f -(\031) 1067 7070 w +(\031) 1067 7190 w 9 /LucidaSansUnicode00 f -(s) 1096 7070 w -(all) 1171 7070 w -(most) 1302 7070 w -(people) 1549 7070 w -(are) 1873 7070 w -(thinking) 2039 7070 w -(of) 2429 7070 w +(s) 1096 7190 w +(all) 1171 7190 w +(most) 1302 7190 w +(people) 1549 7190 w +(are) 1873 7190 w +(thinking) 2039 7190 w +(of) 2429 7190 w 9 /LucidaSansUnicode20 f -(\031\031) 2517 7070 w +(\031\031) 2517 7190 w 9 /LucidaSansUnicode00 f -(.) 2575 7070 w +(.) 2575 7190 w cleartomark showpage saveobj restore @@ -2770,542 +2736,506 @@ mark 4 pagesetup 11 /LucidaSansUnicode00 f -(Cores) 970 850 w -(can) 1314 850 w -(change) 1537 850 w -(roles,) 1959 850 w -(again) 2295 850 w -(under) 2624 850 w -(the) 2975 850 w -(control) 3185 850 w -(of) 3600 850 w -(the) 3747 850 w -(TC.) 3957 850 w -(A) 4176 850 w -(core) 4291 850 w -(might) 4560 850 w -(be) 4910 850 w -(needed) 5080 850 w -(for) 720 980 w -(applications,) 920 980 w -(in) 1646 980 w -(which) 1793 980 w -(case) 2149 980 w -(NIX) 2431 980 w -(can) 2660 980 w -(direct) 2892 980 w -(the) 3244 980 w -(core) 3462 980 w -(to) 3738 980 w -(enter) 3892 980 w -(the) 4216 980 w -(AC) 4433 980 w -(command) 4631 980 w -(loop.) 5202 980 w -(Later,) 720 1110 w -(the) 1062 1110 w -(TC) 1273 1110 w -(might) 1458 1110 w -(instruct) 1809 1110 w -(the) 2256 1110 w -(core) 2467 1110 w -(to) 2738 1110 w -(exit) 2887 1110 w -(the) 3130 1110 w -(AC) 3342 1110 w -(loop) 3535 1110 w -(and) 3811 1110 w -(re) 4050 1110 w -(enter) 4198 1110 w -(the) 4517 1110 w -(group) 4729 1110 w -(of) 5087 1110 w -(TCs.) 5236 1110 w -(At) 720 1240 w -(present,) 875 1240 w -(only) 1351 1240 w -(one) 1613 1240 w -(core) 1848 1240 w -(\255the) 2116 1240 w -(BSP\255) 2361 1240 w -(boots) 2619 1240 w -(to) 2957 1240 w -(become) 3103 1240 w -(a) 3558 1240 w -(TC;) 3656 1240 w -(all) 3873 1240 w -(other) 4035 1240 w -(cores) 4355 1240 w -(boot) 4678 1240 w -(and) 4959 1240 w -(enter) 5194 1240 w -(the) 720 1370 w -(AC) 926 1370 w -(command loop.) 1113 1370 w -(This will) 2013 1370 w -(be) 2489 1370 w -(fixed soon.) 2655 1370 w +(neggligible) 720 850 w +(on) 1349 850 w +(ACs.) 1520 850 w +(Nevertheless,) 1799 850 w +(ACs) 2554 850 w +(may) 2798 850 w +(execute) 3054 850 w +(arbitrary) 3508 850 w +(kernel) 4000 850 w +(code) 4369 850 w +(as) 4660 850 w +(found) 4814 850 w +(in) 5164 850 w +(the) 5301 850 w +(TC, because) 720 980 w +(of) 1404 980 w +(the) 1547 980 w +(shared memory assumption, if) 1753 980 w +(the) 3417 980 w +(architecture) 3623 980 w +(is compatible.) 4295 980 w +(Cores) 970 1146 w +(can) 1314 1146 w +(change) 1537 1146 w +(roles,) 1959 1146 w +(again) 2295 1146 w +(under) 2624 1146 w +(the) 2975 1146 w +(control) 3185 1146 w +(of) 3600 1146 w +(the) 3747 1146 w +(TC.) 3957 1146 w +(A) 4176 1146 w +(core) 4291 1146 w +(might) 4560 1146 w +(be) 4910 1146 w +(needed) 5080 1146 w +(for) 720 1276 w +(applications,) 920 1276 w +(in) 1646 1276 w +(which) 1793 1276 w +(case) 2149 1276 w +(NIX) 2431 1276 w +(can) 2660 1276 w +(direct) 2892 1276 w +(the) 3244 1276 w +(core) 3462 1276 w +(to) 3738 1276 w +(enter) 3892 1276 w +(the) 4216 1276 w +(AC) 4433 1276 w +(command) 4631 1276 w +(loop.) 5202 1276 w +(Later,) 720 1406 w +(the) 1061 1406 w +(TC) 1271 1406 w +(might) 1455 1406 w +(instruct) 1805 1406 w +(the) 2251 1406 w +(core) 2461 1406 w +(to) 2730 1406 w +(exit) 2877 1406 w +(the) 3118 1406 w +(AC) 3328 1406 w +(loop) 3519 1406 w +(and) 3793 1406 w +(re-enter) 4031 1406 w +(the) 4520 1406 w +(group) 4731 1406 w +(of) 5088 1406 w +(TCs.) 5236 1406 w +(At) 720 1536 w +(present,) 875 1536 w +(only) 1351 1536 w +(one) 1613 1536 w +(core) 1848 1536 w +(\255the) 2116 1536 w +(BSP\255) 2361 1536 w +(boots) 2619 1536 w +(to) 2957 1536 w +(become) 3103 1536 w +(a) 3558 1536 w +(TC;) 3656 1536 w +(all) 3873 1536 w +(other) 4035 1536 w +(cores) 4355 1536 w +(boot) 4678 1536 w +(and) 4959 1536 w +(enter) 5194 1536 w +(the) 720 1666 w +(AC) 926 1666 w +(command loop.) 1113 1666 w +(This will) 2013 1666 w +(be) 2489 1666 w +(fixed soon.) 2655 1666 w 11 /LucidaSans-Demi f -(3.) 720 1630 w -(Inter-Core) 888 1630 w -(Communication) 1525 1630 w -11 /LucidaSansUnicode00 f -(In) 720 1796 w -(other) 866 1796 w -(systems) 1195 1796 w -(addressing) 1671 1796 w -(heterogeneous) 2303 1796 w -(many-core) 3145 1796 w -(architectures,) 3773 1796 w -(message) 4548 1796 w -(passing) 5062 1796 w -(is) 720 1926 w -(the) 855 1926 w -(basis) 1073 1926 w -(for) 1394 1926 w -(coordination.) 1593 1926 w -(Some) 2347 1926 w -(of) 2683 1926 w -(them) 2837 1926 w -(handle) 3156 1926 w -(the) 3562 1926 w -(different) 3779 1926 w -(cores) 4286 1926 w -(as) 4618 1926 w -(a) 4781 1926 w -(distributed) 4888 1926 w -(system.) 720 2056 w -(While) 970 2222 w -(future) 1299 2222 w -(manycore) 1664 2222 w -(systems) 2223 2222 w -(may) 2694 2222 w -(have) 2955 2222 w -(heterogeneous) 3244 2222 w -(CPUs,) 4081 2222 w -(one) 4426 2222 w -(aspect) 4664 2222 w -(of) 5050 2222 w -(them) 5199 2222 w -(it) 720 2352 w -(appears) 833 2352 w -(will) 1296 2352 w -(not) 1517 2352 w -(change:) 1733 2352 w -(there) 2191 2352 w -(will) 2509 2352 w -(still) 2730 2352 w -(be) 2963 2352 w -(shared) 3134 2352 w -(memory) 3535 2352 w -(addressable) 4010 2352 w -(from) 4692 2352 w -(all) 4987 2352 w -(cores.) 5151 2352 w -(NIX) 720 2482 w -(takes) 956 2482 w -(advantage) 1294 2482 w -(of) 1896 2482 w -(this) 2058 2482 w -(property) 2309 2482 w -(in) 2818 2482 w -(the) 2973 2482 w -(current) 3199 2482 w -(design.) 3639 2482 w -(NIX-specific) 4119 2482 w -(communica\255) 4824 2482 w -(tions) 720 2612 w -(for) 1029 2612 w -(management) 1227 2612 w -(are) 1967 2612 w -(performed) 2180 2612 w -(via) 2787 2612 w +(3.) 720 1926 w +(Inter-Core) 888 1926 w +(Communication) 1525 1926 w +11 /LucidaSansUnicode00 f +(In) 720 2092 w +(other) 866 2092 w +(systems) 1195 2092 w +(addressing) 1671 2092 w +(heterogeneous) 2303 2092 w +(many-core) 3145 2092 w +(architectures,) 3773 2092 w +(message) 4548 2092 w +(passing) 5062 2092 w +(is) 720 2222 w +(the) 855 2222 w +(basis) 1073 2222 w +(for) 1394 2222 w +(coordination.) 1593 2222 w +(Some) 2347 2222 w +(of) 2683 2222 w +(them) 2837 2222 w +(handle) 3156 2222 w +(the) 3562 2222 w +(different) 3779 2222 w +(cores) 4286 2222 w +(as) 4618 2222 w +(a) 4781 2222 w +(distributed) 4888 2222 w +(system.) 720 2352 w +(While) 970 2518 w +(future) 1299 2518 w +(manycore) 1664 2518 w +(systems) 2223 2518 w +(may) 2694 2518 w +(have) 2955 2518 w +(heterogeneous) 3244 2518 w +(CPUs,) 4081 2518 w +(one) 4426 2518 w +(aspect) 4664 2518 w +(of) 5050 2518 w +(them) 5199 2518 w +(it) 720 2648 w +(appears) 833 2648 w +(will) 1296 2648 w +(not) 1517 2648 w +(change:) 1733 2648 w +(there) 2191 2648 w +(will) 2509 2648 w +(still) 2730 2648 w +(be) 2963 2648 w +(shared) 3134 2648 w +(memory) 3535 2648 w +(addressable) 4010 2648 w +(from) 4692 2648 w +(all) 4987 2648 w +(cores.) 5151 2648 w +(NIX) 720 2778 w +(takes) 956 2778 w +(advantage) 1294 2778 w +(of) 1896 2778 w +(this) 2058 2778 w +(property) 2309 2778 w +(in) 2818 2778 w +(the) 2973 2778 w +(current) 3199 2778 w +(design.) 3639 2778 w +(NIX-specific) 4119 2778 w +(communica\255) 4824 2778 w +(tions) 720 2908 w +(for) 1029 2908 w +(management) 1227 2908 w +(are) 1967 2908 w +(performed) 2180 2908 w +(via) 2787 2908 w 11 /LucidaSans-Italic f -(active) 2982 2612 w -11 /LucidaSansUnicode00 f -(messages,) 3340 2612 w -(called) 3942 2612 w +(active) 2982 2908 w +11 /LucidaSansUnicode00 f +(messages,) 3340 2908 w +(called) 3942 2908 w 11 /LucidaSansUnicode20 f -(\030\030) 4298 2612 w -11 /LucidaSansUnicode00 f -(inter-core-calls) 4368 2612 w +(\030\030) 4298 2908 w +11 /LucidaSansUnicode00 f +(inter-core-calls) 4368 2908 w 11 /LucidaSansUnicode20 f -(\031\031) 5211 2612 w -11 /LucidaSansUnicode00 f -(,) 5281 2612 w -(or) 5360 2612 w -(ICCs.) 720 2742 w -(An) 970 2908 w -(ICC) 1162 2908 w -(consists) 1394 2908 w -(of) 1874 2908 w -(a) 2030 2908 w -(structure) 2139 2908 w -(containing) 2669 2908 w -(a) 3278 2908 w -(pointer) 3387 2908 w -(to) 3819 2908 w -(a) 3976 2908 w -(function,) 4086 2908 w -(an) 4611 2908 w -(indication) 4789 2908 w -(to) 5364 2908 w -(flush) 720 3038 w -(the) 1026 3038 w -(TLB,) 1238 3038 w -(and) 1505 3038 w -(a) 1744 3038 w -(set) 1846 3038 w -(of) 2046 3038 w -(arguments.) 2195 3038 w -(Each) 2877 3038 w -(core) 3162 3038 w -(has) 3432 3038 w -(a) 3657 3038 w -(unique) 3758 3038 w -(ICC) 4165 3038 w -(structure) 4389 3038 w -(associated) 4911 3038 w -(to) 720 3168 w -(it,) 878 3168 w -(and) 1036 3168 w -(polls) 1284 3168 w -(for) 1590 3168 w -(a) 1793 3168 w -(new) 1904 3168 w -(message) 2169 3168 w -(while) 2686 3168 w -(idle.) 3015 3168 w -(The) 3330 3168 w -(core,) 3579 3168 w -(upon) 3894 3168 w -(receiving) 4216 3168 w -(the) 4748 3168 w -(message,) 4970 3168 w -(calls) 720 3298 w -(the) 997 3298 w -(supplied) 1207 3298 w -(function) 1703 3298 w -(with) 2183 3298 w -(the) 2448 3298 w -(arguments) 2658 3298 w -(given.) 3268 3298 w -(Note) 3664 3298 w -(that) 3954 3298 w -(the) 4204 3298 w -(arguments,) 4414 3298 w -(and) 5059 3298 w -(not) 5296 3298 w -(just) 720 3428 w -(the) 953 3428 w -(function, can be) 1159 3428 w -(pointers, because) 2056 3428 w -(we) 3035 3428 w -(are) 3217 3428 w -(sharing memory.) 3420 3428 w -(The) 970 3594 w -(BSP) 1221 3594 w -(reaches) 1457 3594 w -(other) 1919 3594 w -(cores) 2254 3594 w -(mostly) 2592 3594 w -(by) 2999 3594 w -(means) 3177 3594 w -(of) 3578 3594 w -(ICCs.) 3738 3594 w -(Inter-Processor) 4065 3594 w -(Interrupts) 4945 3594 w -(\(IPIs\)) 720 3724 w -(are) 1009 3724 w -(seldom) 1213 3724 w -(used. They are) 1637 3724 w -(relegated for those) 2456 3724 w -(cases when asynchronous comunica\255) 3510 3724 w -(tion) 720 3854 w -(cannot) 967 3854 w -(be) 1367 3854 w -(avoided;) 1537 3854 w -(for) 2029 3854 w -(example,) 2222 3854 w -(when) 2752 3854 w -(a) 3075 3854 w -(user) 3176 3854 w -(wants) 3447 3854 w -(to) 3798 3854 w -(interrupt) 3946 3854 w -(a) 4457 3854 w -(program) 4558 3854 w -(running) 5055 3854 w -(in its AC.) 720 3984 w +(\031\031) 5211 2908 w +11 /LucidaSansUnicode00 f +(,) 5281 2908 w +(or) 5360 2908 w +(ICCs.) 720 3038 w +(An) 970 3204 w +(ICC) 1162 3204 w +(consists) 1394 3204 w +(of) 1874 3204 w +(a) 2030 3204 w +(structure) 2139 3204 w +(containing) 2669 3204 w +(a) 3278 3204 w +(pointer) 3387 3204 w +(to) 3819 3204 w +(a) 3976 3204 w +(function,) 4086 3204 w +(an) 4611 3204 w +(indication) 4789 3204 w +(to) 5364 3204 w +(flush) 720 3334 w +(the) 1026 3334 w +(TLB,) 1238 3334 w +(and) 1505 3334 w +(a) 1744 3334 w +(set) 1846 3334 w +(of) 2046 3334 w +(arguments.) 2195 3334 w +(Each) 2877 3334 w +(core) 3162 3334 w +(has) 3432 3334 w +(a) 3657 3334 w +(unique) 3758 3334 w +(ICC) 4165 3334 w +(structure) 4389 3334 w +(associated) 4911 3334 w +(to) 720 3464 w +(it,) 878 3464 w +(and) 1036 3464 w +(polls) 1284 3464 w +(for) 1590 3464 w +(a) 1793 3464 w +(new) 1904 3464 w +(message) 2169 3464 w +(while) 2686 3464 w +(idle.) 3015 3464 w +(The) 3330 3464 w +(core,) 3579 3464 w +(upon) 3894 3464 w +(receiving) 4216 3464 w +(the) 4748 3464 w +(message,) 4970 3464 w +(calls) 720 3594 w +(the) 997 3594 w +(supplied) 1207 3594 w +(function) 1703 3594 w +(with) 2183 3594 w +(the) 2448 3594 w +(arguments) 2658 3594 w +(given.) 3268 3594 w +(Note) 3664 3594 w +(that) 3954 3594 w +(the) 4204 3594 w +(arguments,) 4414 3594 w +(and) 5059 3594 w +(not) 5296 3594 w +(just) 720 3724 w +(the) 953 3724 w +(function, can be) 1159 3724 w +(pointers, because) 2056 3724 w +(we) 3035 3724 w +(are) 3217 3724 w +(sharing memory.) 3420 3724 w +(The) 970 3890 w +(BSP) 1221 3890 w +(reaches) 1457 3890 w +(other) 1919 3890 w +(cores) 2254 3890 w +(mostly) 2592 3890 w +(by) 2999 3890 w +(means) 3177 3890 w +(of) 3578 3890 w +(ICCs.) 3738 3890 w +(Inter-Processor) 4065 3890 w +(Interrupts) 4945 3890 w +(\(IPIs\)) 720 4020 w +(are) 1009 4020 w +(seldom) 1213 4020 w +(used. They are) 1637 4020 w +(relegated for those) 2456 4020 w +(cases when asynchronous comunica\255) 3510 4020 w +(tion) 720 4150 w +(cannot) 967 4150 w +(be) 1367 4150 w +(avoided;) 1537 4150 w +(for) 2029 4150 w +(example,) 2222 4150 w +(when) 2752 4150 w +(a) 3075 4150 w +(user) 3176 4150 w +(wants) 3447 4150 w +(to) 3798 4150 w +(interrupt) 3946 4150 w +(a) 4457 4150 w +(program) 4558 4150 w +(running) 5055 4150 w +(in its AC.) 720 4280 w 11 /LucidaSans-Demi f -(4.) 720 4244 w -(User) 888 4244 w -(interface) 1182 4244 w -11 /LucidaSansUnicode00 f -(In) 720 4410 w -(many) 857 4410 w -(cases,) 1182 4410 w -(user) 1545 4410 w -(programs) 1813 4410 w -(may) 2363 4410 w -(forget) 2620 4410 w -(about) 2981 4410 w -(NIX) 3324 4410 w -(and) 3543 4410 w -(behave) 3778 4410 w -(as) 4194 4410 w -(they) 4348 4410 w -(would) 4614 4410 w -(in) 4973 4410 w -(a) 5111 4410 w -(stan\255) 5210 4410 w -(dard) 720 4540 w -(Plan) 1006 4540 w -(9) 1270 4540 w -(system.) 1381 4540 w -(The) 1832 4540 w -(kernel) 2073 4540 w -(may) 2448 4540 w -(assign) 2710 4540 w -(an) 3093 4540 w -(AC) 3264 4540 w -(to) 3458 4540 w -(a) 3608 4540 w -(process,) 3711 4540 w -(for) 4199 4540 w -(example,) 4393 4540 w -(because) 4924 4540 w -(it) 5399 4540 w -(is) 720 4670 w -(consuming) 850 4670 w -(full) 1477 4670 w -(quanta) 1692 4670 w -(and) 2102 4670 w -(is) 2342 4670 w -(considered) 2472 4670 w -(as) 3100 4670 w -(CPU) 3259 4670 w -(bound.) 3514 4670 w -(In) 3932 4670 w -(the) 4074 4670 w -(same) 4287 4670 w -(way,) 4610 4670 w -(an) 4890 4670 w -(AC) 5061 4670 w -(pro\255) 5255 4670 w -(cess) 720 4800 w -(that) 1000 4800 w -(issues) 1261 4800 w -(frequent) 1641 4800 w -(system) 2147 4800 w -(calls) 2570 4800 w -(might) 2856 4800 w -(be) 3216 4800 w -(transparently) 3396 4800 w -(moved) 4151 4800 w -(to) 4557 4800 w -(a) 4714 4800 w -(TC,) 4824 4800 w -(or) 5053 4800 w -(a) 5214 4800 w -(KC) 5324 4800 w -(might) 720 4930 w -(be) 1068 4930 w -(assigned) 1236 4930 w -(to) 1745 4930 w -(execute) 1890 4930 w -(its) 2345 4930 w -(system) 2511 4930 w -(calls.) 2922 4930 w -(In) 3231 4930 w -(all) 3368 4930 w -(cases,) 3530 4930 w -(this) 3894 4930 w -(happens) 4129 4930 w -(transparently) 4620 4930 w -(to) 5364 4930 w -(the) 720 5060 w -(process.) 926 5060 w -(For) 970 5226 w -(those) 1190 5226 w -(who) 1533 5226 w -(care,) 1802 5226 w -(manual) 2110 5226 w -(control) 2552 5226 w -(is) 2978 5226 w -(also) 3116 5226 w -(possible.) 3382 5226 w -(There) 3910 5226 w -(are) 4266 5226 w -(two) 4484 5226 w -(primary) 4727 5226 w -(inter\255) 5188 5226 w -(faces to the) 720 5356 w -(new) 1380 5356 w -(activeity:) 1630 5356 w +(4.) 720 4540 w +(User) 888 4540 w +(interface) 1182 4540 w +11 /LucidaSansUnicode00 f +(In) 720 4706 w +(many) 857 4706 w +(cases,) 1182 4706 w +(user) 1545 4706 w +(programs) 1813 4706 w +(may) 2363 4706 w +(forget) 2620 4706 w +(about) 2981 4706 w +(NIX) 3324 4706 w +(and) 3543 4706 w +(behave) 3778 4706 w +(as) 4194 4706 w +(they) 4348 4706 w +(would) 4614 4706 w +(in) 4973 4706 w +(a) 5111 4706 w +(stan\255) 5210 4706 w +(dard) 720 4836 w +(Plan) 1006 4836 w +(9) 1270 4836 w +(system.) 1381 4836 w +(The) 1832 4836 w +(kernel) 2073 4836 w +(may) 2448 4836 w +(assign) 2710 4836 w +(an) 3093 4836 w +(AC) 3264 4836 w +(to) 3458 4836 w +(a) 3608 4836 w +(process,) 3711 4836 w +(for) 4199 4836 w +(example,) 4393 4836 w +(because) 4924 4836 w +(it) 5399 4836 w +(is) 720 4966 w +(consuming) 850 4966 w +(full) 1477 4966 w +(quanta) 1692 4966 w +(and) 2102 4966 w +(is) 2342 4966 w +(considered) 2472 4966 w +(as) 3100 4966 w +(CPU) 3259 4966 w +(bound.) 3514 4966 w +(In) 3932 4966 w +(the) 4074 4966 w +(same) 4287 4966 w +(way,) 4610 4966 w +(an) 4890 4966 w +(AC) 5061 4966 w +(pro\255) 5255 4966 w +(cess) 720 5096 w +(that) 1000 5096 w +(issues) 1261 5096 w +(frequent) 1641 5096 w +(system) 2147 5096 w +(calls) 2570 5096 w +(might) 2856 5096 w +(be) 3216 5096 w +(transparently) 3396 5096 w +(moved) 4151 5096 w +(to) 4557 5096 w +(a) 4714 5096 w +(TC,) 4824 5096 w +(or) 5053 5096 w +(a) 5214 5096 w +(KC) 5324 5096 w +(might) 720 5226 w +(be) 1068 5226 w +(assigned) 1236 5226 w +(to) 1745 5226 w +(execute) 1890 5226 w +(its) 2345 5226 w +(system) 2511 5226 w +(calls.) 2922 5226 w +(In) 3231 5226 w +(all) 3368 5226 w +(cases,) 3530 5226 w +(this) 3894 5226 w +(happens) 4129 5226 w +(transparently) 4620 5226 w +(to) 5364 5226 w +(the) 720 5356 w +(process.) 926 5356 w +(For) 970 5522 w +(those) 1190 5522 w +(who) 1533 5522 w +(care,) 1802 5522 w +(manual) 2110 5522 w +(control) 2552 5522 w +(is) 2978 5522 w +(also) 3116 5522 w +(possible.) 3382 5522 w +(There) 3910 5522 w +(are) 4266 5522 w +(two) 4484 5522 w +(primary) 4727 5522 w +(inter\255) 5188 5522 w +(faces to the) 720 5652 w +(new) 1380 5652 w +(activeity:) 1630 5652 w 11 /LucidaSansUnicode22 f -(\031) 720 5522 w -11 /LucidaSansUnicode00 f -(A) 970 5522 w -(new) 1081 5522 w -(system call:) 1331 5522 w +(\031) 720 5818 w +11 /LucidaSansUnicode00 f +(A) 970 5818 w +(new) 1081 5818 w +(system call:) 1331 5818 w 9 /LucidaTypewriter f -(execac\(int) 940 5692 w -(core,) 1655 5692 w -(char) 2045 5692 w -(*path,) 2370 5692 w -(char) 2825 5692 w -(*args[]\);) 3150 5692 w +(execac\(int) 940 5988 w +(core,) 1655 5988 w +(char) 2045 5988 w +(*path,) 2370 5988 w +(char) 2825 5988 w +(*args[]\);) 3150 5988 w 11 /LucidaSansUnicode22 f -(\031) 720 5918 w -11 /LucidaSansUnicode00 f -(Two new) 970 5918 w -(flags for the) 1476 5918 w +(\031) 720 6214 w +11 /LucidaSansUnicode00 f +(Two new) 970 6214 w +(flags for the) 1476 6214 w 11 /LucidaSans-Italic f -(rfork) 2163 5918 w -11 /LucidaSansUnicode00 f -(system call:) 2473 5918 w +(rfork) 2163 6214 w +11 /LucidaSansUnicode00 f +(system call:) 2473 6214 w 9 /LucidaTypewriter f -(rfork\(RFCORE\);) 940 6088 w -(rfork\(RFCCORE\);) 1980 6088 w +(rfork\(RFCORE\);) 940 6384 w +(rfork\(RFCCORE\);) 1980 6384 w 11 /LucidaSans-Italic f -(Execac) 720 6314 w -11 /LucidaSansUnicode00 f -(is) 1118 6314 w -(similar) 1249 6314 w -(to) 1652 6314 w +(Execac) 720 6610 w +11 /LucidaSansUnicode00 f +(is) 1118 6610 w +(similar) 1249 6610 w +(to) 1652 6610 w 11 /LucidaSans-Italic f -(exec) 1803 6314 w -11 /LucidaSansUnicode00 f -(,) 2033 6314 w -(but) 2111 6314 w -(includes) 2332 6314 w -(a) 2818 6314 w +(exec) 1803 6610 w +11 /LucidaSansUnicode00 f +(,) 2033 6610 w +(but) 2111 6610 w +(includes) 2332 6610 w +(a) 2818 6610 w 11 /LucidaSans-Italic f -(core) 2922 6314 w -11 /LucidaSansUnicode00 f -(number) 3195 6314 w -(as) 3653 6314 w -(its) 3814 6314 w -(first) 3987 6314 w -(argument.) 4246 6314 w -(If) 4840 6314 w -(this) 4957 6314 w -(num\255) 5198 6314 w -(ber) 720 6444 w -(is) 935 6444 w -(0,) 1062 6444 w -(the) 1205 6444 w -(standard) 1415 6444 w +(core) 2922 6610 w +11 /LucidaSansUnicode00 f +(number) 3195 6610 w +(as) 3653 6610 w +(its) 3814 6610 w +(first) 3987 6610 w +(argument.) 4246 6610 w +(If) 4840 6610 w +(this) 4957 6610 w +(num\255) 5198 6610 w +(ber) 720 6740 w +(is) 935 6740 w +(0,) 1062 6740 w +(the) 1205 6740 w +(standard) 1415 6740 w 11 /LucidaSans-Italic f -(exec) 1924 6444 w -11 /LucidaSansUnicode00 f -(system) 2193 6444 w -(call) 2606 6444 w -(is) 2826 6444 w -(performed,) 2953 6444 w -(except) 3589 6444 w -(that) 3985 6444 w -(all) 4235 6444 w -(pages) 4399 6444 w -(are) 4754 6444 w -(faulted) 4960 6444 w -(in) 5372 6444 w -(before) 720 6574 w -(the) 1118 6574 w -(process) 1341 6574 w -(starts.) 1804 6574 w -(If) 2191 6574 w -(this) 2316 6574 w -(number) 2565 6574 w -(is) 3031 6574 w -(negative,) 3171 6574 w -(the) 3709 6574 w -(process) 3932 6574 w -(is) 4395 6574 w -(moved) 4535 6574 w -(to) 4944 6574 w -(an) 5104 6574 w -(AC,) 5285 6574 w -(chosen) 720 6704 w -(by) 1141 6704 w -(the) 1311 6704 w -(kernel.) 1526 6704 w -(If) 1938 6704 w -(this) 2055 6704 w -(number) 2295 6704 w -(is) 2752 6704 w -(positive,) 2883 6704 w -(the) 3377 6704 w -(process) 3591 6704 w -(moves) 4045 6704 w -(to) 4432 6704 w -(the) 4583 6704 w -(AC) 4797 6704 w -(with) 4992 6704 w -(that) 5261 6704 w -(core) 720 6834 w -(number; if) 985 6834 w -(available, otherwise) 1577 6834 w -(the) 2667 6834 w -(system call) 2873 6834 w -(fails.) 3498 6834 w -11 /LucidaSans-Italic f -(RFCORE) 970 7000 w -11 /LucidaSansUnicode00 f -(is) 1448 7000 w -(a) 1595 7000 w -(new) 1715 7000 w -(flag) 1989 7000 w -(for) 2250 7000 w -(the) 2462 7000 w -(standard) 2692 7000 w -(Plan) 3221 7000 w -(9) 3502 7000 w -11 /LucidaSans-Italic f -(rfork) 3630 7000 w -11 /LucidaSansUnicode00 f -(system) 3964 7000 w -(call,) 4397 7000 w -(which) 4672 7000 w -(controls) 5040 7000 w -(resources) 720 7130 w -(for) 1279 7130 w -(the) 1474 7130 w -(process.) 1687 7130 w -(This) 2175 7130 w -(flag) 2442 7130 w -(asks) 2686 7130 w -(the) 2965 7130 w -(kernel) 3178 7130 w -(to) 3553 7130 w -(move) 3703 7130 w -(the) 4033 7130 w -(process) 4246 7130 w -(to) 4698 7130 w -(an) 4847 7130 w -(AC,) 5017 7130 w -(cho\255) 5245 7130 w -(sen) 720 7260 w -(by) 948 7260 w -(the) 1116 7260 w -(kernel.) 1329 7260 w -(A) 1739 7260 w -(counterpart,) 1857 7260 w -11 /LucidaSans-Italic f -(RFCCORE) 2557 7260 w -11 /LucidaSansUnicode00 f -(,) 3051 7260 w -(may) 3128 7260 w -(be) 3390 7260 w -(used) 3563 7260 w -(to) 3860 7260 w -(ask) 4010 7260 w -(the) 4233 7260 w -(kernel) 4446 7260 w -(to) 4821 7260 w -(move) 4971 7260 w -(the) 5301 7260 w +(exec) 1924 6740 w +11 /LucidaSansUnicode00 f +(system) 2193 6740 w +(call) 2606 6740 w +(is) 2826 6740 w +(performed,) 2953 6740 w +(except) 3589 6740 w +(that) 3985 6740 w +(all) 4235 6740 w +(pages) 4399 6740 w +(are) 4754 6740 w +(faulted) 4960 6740 w +(in) 5372 6740 w +(before) 720 6870 w +(the) 1118 6870 w +(process) 1341 6870 w +(starts.) 1804 6870 w +(If) 2191 6870 w +(this) 2316 6870 w +(number) 2565 6870 w +(is) 3031 6870 w +(negative,) 3171 6870 w +(the) 3709 6870 w +(process) 3932 6870 w +(is) 4395 6870 w +(moved) 4535 6870 w +(to) 4944 6870 w +(an) 5104 6870 w +(AC,) 5285 6870 w +(chosen) 720 7000 w +(by) 1141 7000 w +(the) 1311 7000 w +(kernel.) 1526 7000 w +(If) 1938 7000 w +(this) 2055 7000 w +(number) 2295 7000 w +(is) 2752 7000 w +(positive,) 2883 7000 w +(the) 3377 7000 w +(process) 3591 7000 w +(moves) 4045 7000 w +(to) 4432 7000 w +(the) 4583 7000 w +(AC) 4797 7000 w +(with) 4992 7000 w +(that) 5261 7000 w +(core) 720 7130 w +(number; if) 985 7130 w +(available, otherwise) 1577 7130 w +(the) 2667 7130 w +(system call) 2873 7130 w +(fails.) 3498 7130 w cleartomark showpage saveobj restore @@ -3314,407 +3244,443 @@ /saveobj save def mark 5 pagesetup -11 /LucidaSansUnicode00 f -(process back) 720 850 w -(to a) 1451 850 w -(TC.) 1690 850 w -(Thus,) 970 1016 w -(processes) 1303 1016 w -(can) 1870 1016 w -(also) 2093 1016 w -(change) 2347 1016 w -(their) 2768 1016 w -(mode.) 3054 1016 w -(Most) 3462 1016 w -(processes) 3759 1016 w -(are) 4326 1016 w -(started) 4532 1016 w -(on) 4945 1016 w -(the) 5118 1016 w -(TC) 5327 1016 w -(and,) 720 1146 w -(depending) 998 1146 w -(on) 1610 1146 w -(the) 1789 1146 w -(type) 2004 1146 w -(of) 2277 1146 w 11 /LucidaSans-Italic f -(rfork) 2429 1146 w -11 /LucidaSansUnicode00 f -(or) 2748 1146 w +(RFCORE) 970 850 w +11 /LucidaSansUnicode00 f +(is) 1448 850 w +(a) 1595 850 w +(new) 1715 850 w +(flag) 1989 850 w +(for) 2250 850 w +(the) 2462 850 w +(standard) 2692 850 w +(Plan) 3221 850 w +(9) 3502 850 w 11 /LucidaSans-Italic f -(exec) 2904 1146 w -11 /LucidaSansUnicode00 f -(being) 3178 1146 w -(performed,) 3521 1146 w -(can) 4162 1146 w -(optionally) 4391 1146 w -(transition) 4961 1146 w -(to an AC. If) 720 1276 w -(the) 1357 1276 w -(process takes a) 1563 1276 w -(fault, makes a) 2424 1276 w -(system call, or has some) 3213 1276 w -(other) 4563 1276 w -(problem,) 4882 1276 w -(it) 5399 1276 w -(will) 720 1406 w -(transition) 937 1406 w -(back) 1484 1406 w -(to) 1770 1406 w -(the) 1914 1406 w -(TC) 2121 1406 w -(for) 2302 1406 w -(service.) 2491 1406 w -(Once) 2967 1406 w -(serviced, the) 3275 1406 w -(process may resume) 3990 1406 w -(execu\255) 5121 1406 w -(tion) 720 1536 w -(in) 975 1536 w -(the) 1122 1536 w -(AC.) 1340 1536 w -(Note) 1574 1536 w -(that) 1872 1536 w -(this) 2130 1536 w -(is) 2374 1536 w -(a) 2509 1536 w -(description) 2617 1536 w -(of) 3261 1536 w -(behavior,) 3416 1536 w -(and) 3960 1536 w -(not) 4206 1536 w -(of) 4430 1536 w -(the) 4586 1536 w -(implementa\255) 4805 1536 w -(tion. In the) 720 1666 w -(implementation, there) 1339 1666 w -(is no process migration.) 2561 1666 w -(user) 1361 2082 w -1296 2420 1656 2420 Dl -1656 2420 -180 0 0 -180 Da -1476 2240 0 180 -180 0 Da -1656 2492 1296 2492 Dl -1296 2492 180 0 0 180 Da -1476 2672 0 -180 180 0 Da -(kernel) 1184 2874 w -(\(TC\)) 1552 2874 w -2106 2456 2142 2456 Dl -2180 2456 2216 2456 Dl -2253 2456 2289 2456 Dl -2327 2456 2363 2456 Dl -2401 2456 2437 2456 Dl -2475 2456 2511 2456 Dl -2549 2456 2585 2456 Dl -2622 2456 2658 2456 Dl -2697 2456 2733 2456 Dl -2771 2456 2807 2456 Dl -2844 2456 2880 2456 Dl -2918 2456 2954 2456 Dl -2993 2456 3029 2456 Dl -3066 2456 3102 2456 Dl -3140 2456 3176 2456 Dl -3214 2456 3250 2456 Dl -3288 2456 3324 2456 Dl -3362 2456 3398 2456 Dl -3435 2456 3471 2456 Dl -3510 2456 3546 2456 Dl -3474 2474 3546 2456 Dl -3474 2438 3546 2456 Dl -(move) 2517 2413 w -(to AC) 2840 2413 w -(user) 4601 2082 w -4536 2420 4896 2420 Dl -4896 2420 -180 0 0 -180 Da -4716 2240 0 180 -180 0 Da -4356 2492 3996 2492 Dl -3996 2492 180 0 0 180 Da -4176 2672 0 -180 180 0 Da -(kernel) 3884 2874 w -(\(TC\)) 4252 2874 w -(AC) 4640 2849 w +(rfork) 3630 850 w +11 /LucidaSansUnicode00 f +(system) 3964 850 w +(call,) 4397 850 w +(which) 4672 850 w +(controls) 5040 850 w +(resources) 720 980 w +(for) 1279 980 w +(the) 1474 980 w +(process.) 1687 980 w +(This) 2175 980 w +(flag) 2442 980 w +(asks) 2686 980 w +(the) 2965 980 w +(kernel) 3178 980 w +(to) 3553 980 w +(move) 3703 980 w +(the) 4033 980 w +(process) 4246 980 w +(to) 4698 980 w +(an) 4847 980 w +(AC,) 5017 980 w +(cho\255) 5245 980 w +(sen) 720 1110 w +(by) 948 1110 w +(the) 1116 1110 w +(kernel.) 1329 1110 w +(A) 1739 1110 w +(counterpart,) 1857 1110 w +11 /LucidaSans-Italic f +(RFCCORE) 2557 1110 w +11 /LucidaSansUnicode00 f +(,) 3051 1110 w +(may) 3128 1110 w +(be) 3390 1110 w +(used) 3563 1110 w +(to) 3860 1110 w +(ask) 4010 1110 w +(the) 4233 1110 w +(kernel) 4446 1110 w +(to) 4821 1110 w +(move) 4971 1110 w +(the) 5301 1110 w +(process back) 720 1240 w +(to a) 1451 1240 w +(TC.) 1690 1240 w +(Thus,) 970 1406 w +(processes) 1303 1406 w +(can) 1870 1406 w +(also) 2093 1406 w +(change) 2347 1406 w +(their) 2768 1406 w +(mode.) 3054 1406 w +(Most) 3462 1406 w +(processes) 3759 1406 w +(are) 4326 1406 w +(started) 4532 1406 w +(on) 4945 1406 w +(the) 5118 1406 w +(TC) 5327 1406 w +(and,) 720 1536 w +(depending) 998 1536 w +(on) 1610 1536 w +(the) 1789 1536 w +(type) 2004 1536 w +(of) 2277 1536 w +11 /LucidaSans-Italic f +(rfork) 2429 1536 w +11 /LucidaSansUnicode00 f +(or) 2748 1536 w +11 /LucidaSans-Italic f +(exec) 2904 1536 w +11 /LucidaSansUnicode00 f +(being) 3178 1536 w +(performed,) 3521 1536 w +(can) 4162 1536 w +(optionally) 4391 1536 w +(transition) 4961 1536 w +(to an AC. If) 720 1666 w +(the) 1357 1666 w +(process takes a) 1563 1666 w +(fault, makes a) 2424 1666 w +(system call, or has some) 3213 1666 w +(other) 4563 1666 w +(problem,) 4882 1666 w +(it) 5399 1666 w +(will) 720 1796 w +(transition) 937 1796 w +(back) 1484 1796 w +(to) 1770 1796 w +(the) 1914 1796 w +(TC) 2121 1796 w +(for) 2302 1796 w +(service.) 2491 1796 w +(Once) 2967 1796 w +(serviced, the) 3275 1796 w +(process may resume) 3990 1796 w +(execu\255) 5121 1796 w +(tion) 720 1926 w +(in) 975 1926 w +(the) 1122 1926 w +(AC.) 1340 1926 w +(Note) 1574 1926 w +(that) 1872 1926 w +(this) 2130 1926 w +(is) 2374 1926 w +(a) 2509 1926 w +(description) 2617 1926 w +(of) 3261 1926 w +(behavior,) 3416 1926 w +(and) 3960 1926 w +(not) 4206 1926 w +(of) 4430 1926 w +(the) 4586 1926 w +(implementa\255) 4805 1926 w +(tion. In the) 720 2056 w +(implementation, there) 1339 2056 w +(is no process migration.) 2561 2056 w +(user) 1361 2472 w +1296 2810 1656 2810 Dl +1656 2810 -180 0 0 -180 Da +1476 2630 0 180 -180 0 Da +1656 2882 1296 2882 Dl +1296 2882 180 0 0 180 Da +1476 3062 0 -180 180 0 Da +(kernel) 1184 3264 w +(\(TC\)) 1552 3264 w +2106 2846 2142 2846 Dl +2180 2846 2216 2846 Dl +2253 2846 2289 2846 Dl +2327 2846 2363 2846 Dl +2401 2846 2437 2846 Dl +2475 2846 2511 2846 Dl +2549 2846 2585 2846 Dl +2622 2846 2658 2846 Dl +2697 2846 2733 2846 Dl +2771 2846 2807 2846 Dl +2844 2846 2880 2846 Dl +2918 2846 2954 2846 Dl +2993 2846 3029 2846 Dl +3066 2846 3102 2846 Dl +3140 2846 3176 2846 Dl +3214 2846 3250 2846 Dl +3288 2846 3324 2846 Dl +3362 2846 3398 2846 Dl +3435 2846 3471 2846 Dl +3510 2846 3546 2846 Dl +3474 2864 3546 2846 Dl +3474 2828 3546 2846 Dl +(move) 2517 2803 w +(to AC) 2840 2803 w +(user) 4601 2472 w +4536 2810 4896 2810 Dl +4896 2810 -180 0 0 -180 Da +4716 2630 0 180 -180 0 Da +4356 2882 3996 2882 Dl +3996 2882 180 0 0 180 Da +4176 3062 0 -180 180 0 Da +(kernel) 3884 3264 w +(\(TC\)) 4252 3264 w +(AC) 4640 3239 w 10 /LucidaSans-Demi f -(Figure 2) 1314 3296 w +(Figure 2) 1314 3686 w 10 /LucidaSansUnicode00 f -(A traditional Plan) 1800 3296 w -(9) 2665 3296 w -(process) 2761 3296 w -(has) 3168 3296 w -(its) 3369 3296 w -(user) 3519 3296 w -(space) 3762 3296 w -(in) 4071 3296 w -(the) 4195 3296 w -(same) 4383 3296 w -(con\255) 4671 3296 w -(text) 1314 3416 w -(used) 1540 3416 w -(for) 1807 3416 w -(its) 1981 3416 w -(kernel) 2133 3416 w -(space.) 2470 3416 w -(After) 2812 3416 w -(moving) 3086 3416 w -(to) 3479 3416 w -(an) 3611 3416 w -(AC,) 3762 3416 w -(the) 3966 3416 w -(user) 4155 3416 w -(context) 4399 3416 w -(is) 4798 3416 w -(found on a different core, but the) 1314 3536 w -(kernel) 2978 3536 w -(part) 3313 3536 w -(remains) 3542 3536 w -(in) 3962 3536 w -(the) 4086 3536 w -(TC) 4274 3536 w -(as) 4439 3536 w -(a) 4578 3536 w -(han\255) 4666 3536 w -(dler for system calls and traps.) 1314 3656 w -11 /LucidaSansUnicode00 f -(Binary) 970 3882 w -(compatibility) 1336 3882 w -(for) 2066 3882 w -(processes) 2258 3882 w -(is) 2826 3882 w -(hence) 2953 3882 w -(rather) 3308 3882 w -(easy:) 3669 3882 w -(old) 3979 3882 w -(processes) 4186 3882 w -(only) 4754 3882 w -(run) 5017 3882 w -(on) 5237 3882 w -(a) 5411 3882 w -(TC,) 720 4012 w -(unless) 950 4012 w -(the) 1342 4012 w -(kernel) 1563 4012 w -(decides) 1946 4012 w -(otherwise.) 2402 4012 w -(If) 3040 4012 w -(a) 3163 4012 w -(user) 3274 4012 w -(makes) 3555 4012 w -(a) 3950 4012 w -(mistake) 4061 4012 w -(and) 4529 4012 w -(starts) 4777 4012 w -(an) 5126 4012 w -(old) 5304 4012 w -(binary) 720 4142 w -(on) 1093 4142 w -(an) 1269 4142 w -(AC,) 1439 4142 w -(it) 1667 4142 w -(will) 1781 4142 w -(simply) 2003 4142 w -(move) 2392 4142 w -(back) 2721 4142 w -(to) 3012 4142 w -(a) 3161 4142 w -(TC) 3263 4142 w -(at) 3449 4142 w -(the) 3592 4142 w -(first) 3804 4142 w -(system) 4060 4142 w -(call) 4475 4142 w -(and) 4697 4142 w -(stay) 4937 4142 w -(there) 5194 4142 w -(until) 720 4272 w -(directed) 1004 4272 w -(to) 1483 4272 w -(move.) 1633 4272 w -(If) 2033 4272 w -(the) 2148 4272 w -(binary) 2361 4272 w -(is) 2735 4272 w -(mostly) 2865 4272 w -(spending) 3262 4272 w -(its) 3796 4272 w -(time) 3967 4272 w -(on) 4246 4272 w -(computation,) 4423 4272 w -(it) 5172 4272 w -(can) 5287 4272 w -(still) 720 4402 w -(move) 956 4402 w -(back) 1287 4402 w -(out) 1580 4402 w -(to) 1799 4402 w -(an) 1950 4402 w -(AC) 2122 4402 w -(for) 2317 4402 w -(the) 2513 4402 w -(duration) 2727 4402 w -(of) 3221 4402 w -(the) 3372 4402 w -(time) 3586 4402 w -(spent) 3867 4402 w -(in) 4207 4402 w -(a) 4351 4402 w -(computational) 4456 4402 w -(ker\255) 5265 4402 w -(nel.) 720 4532 w -(No) 998 4532 w -(checkpointing) 1192 4532 w -(is) 1989 4532 w -(needed:) 2123 4532 w -(this) 2596 4532 w -(movement) 2839 4532 w -(works) 3445 4532 w -(because) 3807 4532 w -(the) 4286 4532 w -(cores) 4502 4532 w -(share) 4833 4532 w -(mem\255) 5170 4532 w -(ory.) 720 4662 w +(A traditional Plan) 1800 3686 w +(9) 2665 3686 w +(process) 2761 3686 w +(has) 3168 3686 w +(its) 3369 3686 w +(user) 3519 3686 w +(space) 3762 3686 w +(in) 4071 3686 w +(the) 4195 3686 w +(same) 4383 3686 w +(con\255) 4671 3686 w +(text) 1314 3806 w +(used) 1540 3806 w +(for) 1807 3806 w +(its) 1981 3806 w +(kernel) 2133 3806 w +(space.) 2470 3806 w +(After) 2812 3806 w +(moving) 3086 3806 w +(to) 3479 3806 w +(an) 3611 3806 w +(AC,) 3762 3806 w +(the) 3966 3806 w +(user) 4155 3806 w +(context) 4399 3806 w +(is) 4798 3806 w +(found on a different core, but the) 1314 3926 w +(kernel) 2978 3926 w +(part) 3313 3926 w +(remains) 3542 3926 w +(in) 3962 3926 w +(the) 4086 3926 w +(TC) 4274 3926 w +(as) 4439 3926 w +(a) 4578 3926 w +(han\255) 4666 3926 w +(dler for system calls and traps.) 1314 4046 w +11 /LucidaSansUnicode00 f +(Binary) 720 4272 w +(compatibility) 1088 4272 w +(for) 1820 4272 w +(processes) 2014 4272 w +(is) 2584 4272 w +(hence) 2713 4272 w +(rather) 3070 4272 w +(easy:) 3433 4272 w +(old) 3745 4272 w +(processes) 3954 4272 w +(only) 4524 4272 w +(run) 4789 4272 w +(on) 5012 4272 w +(a) 5189 4272 w +(TC,) 5292 4272 w +(unless) 720 4402 w +(the) 1102 4402 w +(kernel) 1313 4402 w +(decides) 1686 4402 w +(otherwise.) 2132 4402 w +(If) 2760 4402 w +(a) 2873 4402 w +(user) 2974 4402 w +(makes) 3245 4402 w +(a) 3630 4402 w +(mistake) 3731 4402 w +(and) 4189 4402 w +(starts) 4426 4402 w +(an) 4765 4402 w +(old) 4933 4402 w +(binary) 5140 4402 w +(on) 720 4532 w +(an) 900 4532 w +(AC,) 1074 4532 w +(it) 1307 4532 w +(will) 1426 4532 w +(simply) 1653 4532 w +(move) 2047 4532 w +(back) 2381 4532 w +(to) 2677 4532 w +(a) 2831 4532 w +(TC) 2938 4532 w +(at) 3129 4532 w +(the) 3277 4532 w +(first) 3494 4532 w +(system) 3755 4532 w +(call) 4175 4532 w +(and) 4402 4532 w +(stay) 4646 4532 w +(there) 4907 4532 w +(until) 5231 4532 w +(directed) 720 4662 w +(to) 1202 4662 w +(move.) 1356 4662 w +(If) 1760 4662 w +(the) 1879 4662 w +(binary) 2096 4662 w +(is) 2473 4662 w +(mostly) 2606 4662 w +(spending) 3006 4662 w +(its) 3543 4662 w +(time) 3717 4662 w +(on) 3999 4662 w +(computation,) 4179 4662 w +(it) 4931 4662 w +(can) 5049 4662 w +(still) 5279 4662 w +(move) 720 4792 w +(back) 1056 4792 w +(out) 1354 4792 w +(to) 1578 4792 w +(an) 1734 4792 w +(AC) 1911 4792 w +(for) 2111 4792 w +(the) 2312 4792 w +(duration) 2531 4792 w +(of) 3030 4792 w +(the) 3186 4792 w +(time) 3405 4792 w +(spent) 3690 4792 w +(in) 4034 4792 w +(a) 4182 4792 w +(computational) 4291 4792 w +(kernel.) 5104 4792 w +(No checkpointing is needed: this movement) 720 4922 w +(works because) 3102 4922 w +(the) 3923 4922 w +(cores share) 4129 4922 w +(memory.) 4777 4922 w 11 /LucidaSans-Demi f -(5.) 720 4922 w -(Semaphores) 888 4922 w -(and) 1617 4922 w -(tubes) 1863 4922 w -11 /LucidaSansUnicode00 f -(Because) 720 5088 w -(in) 1194 5088 w -(NIX) 1339 5088 w -(applications) 1566 5088 w -(may) 2255 5088 w -(run) 2520 5088 w -(in) 2746 5088 w -(ACs) 2891 5088 w -(undisturbed) 3144 5088 w -(by) 3836 5088 w -(other) 4007 5088 w -(kernel) 4335 5088 w -(activities,) 4714 5088 w -(it) 5265 5088 w -(is) 5384 5088 w -(important) 720 5218 w -(to) 1282 5218 w -(be) 1426 5218 w -(able) 1593 5218 w -(to) 1853 5218 w -(perform) 1997 5218 w -(inter process communication wihout) 2464 5218 w -(the) 4444 5218 w -(help of) 4650 5218 w -(the) 5059 5218 w -(ker\255) 5265 5218 w -(nel) 720 5348 w -(if) 931 5348 w -(feasible.) 1053 5348 w -(Besides) 1552 5348 w -(the) 2002 5348 w -(standard) 2222 5348 w -(toolkit) 2741 5348 w -(of) 3134 5348 w -(IPC) 3291 5348 w -(mechanisms) 3509 5348 w -(in) 4221 5348 w -(Plan) 4371 5348 w -(9,) 4643 5348 w -(NIX) 4797 5348 w -(includes) 5029 5348 w -(two mechanisms for this purpose:) 720 5478 w +(5.) 720 5182 w +(Semaphores) 888 5182 w +(and) 1617 5182 w +(tubes) 1863 5182 w +11 /LucidaSansUnicode00 f +(Because) 720 5348 w +(in) 1194 5348 w +(NIX) 1339 5348 w +(applications) 1566 5348 w +(may) 2255 5348 w +(run) 2520 5348 w +(in) 2746 5348 w +(ACs) 2891 5348 w +(undisturbed) 3144 5348 w +(by) 3836 5348 w +(other) 4007 5348 w +(kernel) 4335 5348 w +(activities,) 4714 5348 w +(it) 5265 5348 w +(is) 5384 5348 w +(important) 720 5478 w +(to) 1282 5478 w +(be) 1426 5478 w +(able) 1593 5478 w +(to) 1853 5478 w +(perform) 1997 5478 w +(inter process communication wihout) 2464 5478 w +(the) 4444 5478 w +(help of) 4650 5478 w +(the) 5059 5478 w +(ker\255) 5265 5478 w +(nel) 720 5608 w +(if) 931 5608 w +(feasible.) 1053 5608 w +(Besides) 1552 5608 w +(the) 2002 5608 w +(standard) 2222 5608 w +(toolkit) 2741 5608 w +(of) 3134 5608 w +(IPC) 3291 5608 w +(mechanisms) 3509 5608 w +(in) 4221 5608 w +(Plan) 4371 5608 w +(9,) 4643 5608 w +(NIX) 4797 5608 w +(includes) 5029 5608 w +(two mechanisms for this purpose:) 720 5738 w 11 /LucidaSansUnicode22 f -(\031) 720 5644 w -11 /LucidaSansUnicode00 f -(Optimistic user-level) 970 5644 w -(semaphores.) 2127 5644 w +(\031) 720 5904 w +11 /LucidaSansUnicode00 f +(Optimistic user-level) 970 5904 w +(semaphores, and) 2127 5904 w 11 /LucidaSansUnicode22 f -(\031) 720 5810 w -11 /LucidaSansUnicode00 f -(Tubes) 970 5810 w -(NIX) 720 5976 w -(semaphores) 948 5976 w -(use) 1643 5976 w -(atomic) 1876 5976 w -(increment) 2282 5976 w -(and) 2865 5976 w -(decrement) 3110 5976 w -(operations,) 3724 5976 w -(as) 4374 5976 w -(found) 4538 5976 w -(on) 4898 5976 w -(AMD64) 5080 5976 w -(architectures,) 720 6106 w -(to) 1485 6106 w -(update) 1630 6106 w -(a) 2037 6106 w -(semaphore) 2135 6106 w -(value) 2763 6106 w -(in) 3079 6106 w -(order) 3215 6106 w -(to) 3539 6106 w -(synchronize.) 3683 6106 w -(If) 4396 6106 w -(the) 4505 6106 w -(operation) 4712 6106 w -(per\255) 5260 6106 w -(formed in the) 720 6236 w -(semaphore) 1482 6236 w -(may) 2110 6236 w -(proceed) 2366 6236 w -(without) 2832 6236 w -(blocking) 3270 6236 w -(\(and) 3762 6236 w -(without) 4032 6236 w -(requiring) 4470 6236 w -(to) 4995 6236 w -(awake) 5139 6236 w -(a) 720 6366 w -(peer) 826 6366 w -(process\),) 1109 6366 w -(it) 1636 6366 w -(is) 1753 6366 w -(performed) 1885 6366 w -(by) 2491 6366 w -(the) 2661 6366 w -(user) 2876 6366 w -(library) 3151 6366 w -(without) 3536 6366 w -(entering) 3982 6366 w -(the) 4472 6366 w -(kernel.) 4687 6366 w -(Other\255) 5134 6366 w -(wise, the) 720 6496 w -(kernel) 1231 6496 w -(is called to either block) 1599 6496 w -(or awake) 2880 6496 w -(another process.) 3395 6496 w -(The) 970 6662 w -(interface) 1220 6662 w -(provided) 1739 6662 w -(for) 2260 6662 w -(semaphores) 2464 6662 w -(contains) 3163 6662 w -(the) 3664 6662 w -(two) 3887 6662 w -(standard) 4132 6662 w -(operations) 4654 6662 w -(and) 5274 6662 w -(another one,) 720 6792 w +(\031) 720 6070 w +11 /LucidaSansUnicode00 f +(Tubes.) 970 6070 w +(NIX) 720 6236 w +(semaphores) 948 6236 w +(use) 1643 6236 w +(atomic) 1876 6236 w +(increment) 2282 6236 w +(and) 2865 6236 w +(decrement) 3110 6236 w +(operations,) 3724 6236 w +(as) 4374 6236 w +(found) 4538 6236 w +(on) 4898 6236 w +(AMD64) 5080 6236 w +(and) 720 6366 w +(other) 973 6366 w +(architectures,) 1311 6366 w +(to) 2094 6366 w +(update) 2257 6366 w +(a) 2682 6366 w +(semaphore) 2798 6366 w +(value) 3445 6366 w +(in) 3780 6366 w +(order) 3935 6366 w +(to) 4278 6366 w +(synchronize.) 4441 6366 w +(If) 5173 6366 w +(the) 5301 6366 w +(operation) 720 6496 w +(performed) 1299 6496 w +(in) 1928 6496 w +(the) 2095 6496 w +(semaphore) 2333 6496 w +(may) 2992 6496 w +(proceed) 3279 6496 w +(without) 3776 6496 w +(blocking) 4245 6496 w +(\(and) 4768 6496 w +(without) 5070 6496 w +(requiring) 720 6626 w +(to) 1252 6626 w +(awake) 1403 6626 w +(a) 1779 6626 w +(peer) 1883 6626 w +(process\),) 2164 6626 w +(it) 2689 6626 w +(is) 2805 6626 w +(performed) 2936 6626 w +(by) 3541 6626 w +(the) 3710 6626 w +(user) 3924 6626 w +(library) 4198 6626 w +(without) 4582 6626 w +(entering) 5026 6626 w +(the) 720 6756 w +(kernel.) 926 6756 w +(Otherwise, the) 1364 6756 w +(kernel) 2177 6756 w +(is called to either block) 2545 6756 w +(or awake) 3826 6756 w +(another process.) 4341 6756 w +(The) 970 6922 w +(interface) 1220 6922 w +(provided) 1739 6922 w +(for) 2260 6922 w +(semaphores) 2464 6922 w +(contains) 3163 6922 w +(the) 3664 6922 w +(two) 3887 6922 w +(standard) 4132 6922 w +(operations) 4654 6922 w +(and) 5274 6922 w +(another one,) 720 7052 w 11 /LucidaSans-Italic f -(altsems) 1434 6792 w -11 /LucidaSansUnicode00 f -(, which is not) 1843 6792 w -(usual.) 2591 6792 w -9 /LucidaTypewriter f -(void) 1200 6962 w -(upsem\(int) 1525 6962 w -(*sem\);) 2175 6962 w -(void) 1200 7072 w -(downsem\(int) 1525 7072 w -(*sem\);) 2305 7072 w -(int) 1200 7182 w -(altsems\(int) 1460 7182 w -(*sems[],) 2240 7182 w -(int) 2825 7182 w -(nsems\);) 3085 7182 w +(altsems) 1434 7052 w +11 /LucidaSansUnicode00 f +(, which is not) 1843 7052 w +(usual.) 2591 7052 w cleartomark showpage saveobj restore @@ -3723,588 +3689,494 @@ /saveobj save def mark 6 pagesetup +9 /LucidaTypewriter f +(void) 1200 830 w +(upsem\(int) 1525 830 w +(*sem\);) 2175 830 w +(void) 1200 940 w +(downsem\(int) 1525 940 w +(*sem\);) 2305 940 w +(int) 1200 1050 w +(altsems\(int) 1460 1050 w +(*sems[],) 2240 1050 w +(int) 2825 1050 w +(nsems\);) 3085 1050 w 11 /LucidaSans-Italic f -(Upsem) 720 850 w -11 /LucidaSansUnicode00 f -(and) 1118 850 w +(Upsem) 720 1276 w +11 /LucidaSansUnicode00 f +(and) 1118 1276 w 11 /LucidaSans-Italic f -(downsem) 1357 850 w -11 /LucidaSansUnicode00 f -(do) 1896 850 w -(not) 2073 850 w -(deserve) 2290 850 w -(any) 2744 850 w -(comment,) 2971 850 w -(other) 3546 850 w -(than) 3871 850 w -(their) 4151 850 w -(optimism) 4441 850 w -(and) 4984 850 w -(their) 5224 850 w -(ability) 720 980 w -(to) 1094 980 w -(run) 1252 980 w -(at) 1483 980 w -(user-level) 1634 980 w -(when) 2223 980 w -(feasible.) 2555 980 w -(In) 3054 980 w -(the) 3203 980 w -(worst) 3423 980 w -(case,) 3766 980 w -(they) 4085 980 w -(call) 4362 980 w -(two) 4592 980 w -(new) 4834 980 w -(system) 5098 980 w -(calls) 720 1110 w -(\() 1021 1110 w +(downsem) 1357 1276 w +11 /LucidaSansUnicode00 f +(do) 1896 1276 w +(not) 2073 1276 w +(deserve) 2290 1276 w +(any) 2744 1276 w +(comment,) 2971 1276 w +(other) 3546 1276 w +(than) 3871 1276 w +(their) 4151 1276 w +(optimism) 4441 1276 w +(and) 4984 1276 w +(their) 5224 1276 w +(ability) 720 1406 w +(to) 1094 1406 w +(run) 1252 1406 w +(at) 1483 1406 w +(user-level) 1634 1406 w +(when) 2223 1406 w +(feasible.) 2555 1406 w +(In) 3054 1406 w +(the) 3203 1406 w +(worst) 3423 1406 w +(case,) 3766 1406 w +(they) 4085 1406 w +(call) 4362 1406 w +(two) 4592 1406 w +(new) 4834 1406 w +(system) 5098 1406 w +(calls) 720 1536 w +(\() 1021 1536 w 11 /LucidaSans-Italic f -(semsleep) 1057 1110 w -11 /LucidaSansUnicode00 f -(,) 1540 1110 w -(and) 1639 1110 w +(semsleep) 1057 1536 w +11 /LucidaSansUnicode00 f +(,) 1540 1536 w +(and) 1639 1536 w 11 /LucidaSans-Italic f -(semwakeup) 1901 1110 w -11 /LucidaSansUnicode00 f -(\)) 2525 1110 w -(to) 2625 1110 w -(block) 2797 1110 w -(or) 3149 1110 w -(wake) 3325 1110 w -(up) 3661 1110 w -(another) 3862 1110 w -(process,) 4338 1110 w -(if) 4848 1110 w -(required.) 4985 1110 w -(Optionally,) 720 1240 w -(before) 1342 1240 w -(blocking,) 1730 1240 w +(semwakeup) 1901 1536 w +11 /LucidaSansUnicode00 f +(\)) 2525 1536 w +(to) 2625 1536 w +(block) 2797 1536 w +(or) 3149 1536 w +(wake) 3325 1536 w +(up) 3661 1536 w +(another) 3862 1536 w +(process,) 4338 1536 w +(if) 4848 1536 w +(required.) 4985 1536 w +(Optionally,) 720 1666 w +(before) 1342 1666 w +(blocking,) 1730 1666 w 11 /LucidaSans-Italic f -(downsem) 2262 1240 w -11 /LucidaSansUnicode00 f -(may) 2801 1240 w -(spin,) 3062 1240 w -(busy) 3363 1240 w -(waiting) 3654 1240 w -(for) 4082 1240 w -(a) 4276 1240 w -(chance) 4378 1240 w -(to) 4790 1240 w -(perform) 4939 1240 w -(a) 5411 1240 w -(down on the) 720 1370 w -(semaphore.) 1420 1370 w +(downsem) 2262 1666 w +11 /LucidaSansUnicode00 f +(may) 2801 1666 w +(spin,) 3062 1666 w +(busy) 3363 1666 w +(waiting) 3654 1666 w +(for) 4082 1666 w +(a) 4276 1666 w +(chance) 4378 1666 w +(to) 4790 1666 w +(perform) 4939 1666 w +(a) 5411 1666 w +(down on the) 720 1796 w +(semaphore) 1420 1796 w +(without) 2047 1796 w +(blocking.) 2484 1796 w 11 /LucidaSans-Italic f -(Altsems) 970 1536 w -11 /LucidaSansUnicode00 f -(is) 1427 1536 w -(a) 1554 1536 w -(novel) 1654 1536 w -(operation,) 1979 1536 w -(which) 2566 1536 w -(tries) 2915 1536 w -(to) 3191 1536 w -(perform) 3339 1536 w -(a) 3810 1536 w +(Altsems) 970 1962 w +11 /LucidaSansUnicode00 f +(is) 1427 1962 w +(a) 1554 1962 w +(novel) 1654 1962 w +(operation,) 1979 1962 w +(which) 2566 1962 w +(tries) 2915 1962 w +(to) 3191 1962 w +(perform) 3339 1962 w +(a) 3810 1962 w 11 /LucidaSans-Italic f -(downsem) 3911 1536 w -11 /LucidaSansUnicode00 f -(in) 4449 1536 w -(one) 4589 1536 w -(of) 4826 1536 w -(the) 4974 1536 w -(given) 5185 1536 w -(semaphores.) 720 1666 w -(It) 1444 1666 w -(is) 1557 1666 w -(not) 1685 1666 w -(known) 1901 1666 w -(in) 2293 1666 w -(advance) 2433 1666 w -(in) 2907 1666 w -(which) 3047 1666 w -(semaphore) 3396 1666 w -(will) 4028 1666 w -(be) 4249 1666 w -(the) 4420 1666 w -(down) 4631 1666 w -(operation) 4960 1666 w -(performed.) 720 1796 w -(If) 1357 1796 w -(more) 1470 1796 w -(than) 1786 1796 w -(one) 2064 1796 w -(semaphores) 2301 1796 w -(are) 2989 1796 w -(ready) 3197 1796 w -(for) 3531 1796 w -(a) 3724 1796 w -(down) 3825 1796 w -(without) 4154 1796 w -(blocking,) 4596 1796 w -(one) 5127 1796 w -(of) 5364 1796 w -(them) 720 1926 w -(is) 1034 1926 w -(elected) 1163 1926 w -(and) 1588 1926 w -(the) 1827 1926 w -(down) 2039 1926 w -(is) 2368 1926 w -(performed;) 2496 1926 w -(the) 3133 1926 w -(function) 3344 1926 w -(returns) 3825 1926 w -(an) 4250 1926 w -(index) 4419 1926 w -(value) 4757 1926 w -(indicat\255) 5077 1926 w -(ing) 720 2056 w -(which) 939 2056 w -(one.) 1299 2056 w -(If) 1582 2056 w -(none) 1706 2056 w -(of) 2022 2056 w -(the) 2181 2056 w -(downs) 2404 2056 w -(may) 2801 2056 w -(proceed,) 3073 2056 w -(the) 3590 2056 w -(operation) 3813 2056 w -(calls) 4377 2056 w -(the) 4666 2056 w -(kernel) 4889 2056 w -(and) 5274 2056 w -(blocks.) 720 2186 w -(Therefore,) 970 2352 w -(in) 1570 2352 w -(the) 1714 2352 w -(best) 1929 2352 w -(case,) 2202 2352 w -(a) 2517 2352 w +(downsem) 3911 1962 w +11 /LucidaSansUnicode00 f +(in) 4449 1962 w +(one) 4589 1962 w +(of) 4826 1962 w +(the) 4974 1962 w +(given) 5185 1962 w +(semaphores.) 720 2092 w +(It) 1444 2092 w +(is) 1557 2092 w +(not) 1685 2092 w +(known) 1901 2092 w +(in) 2293 2092 w +(advance) 2433 2092 w +(in) 2907 2092 w +(which) 3047 2092 w +(semaphore) 3396 2092 w +(will) 4028 2092 w +(be) 4249 2092 w +(the) 4420 2092 w +(down) 4631 2092 w +(operation) 4960 2092 w +(performed.) 720 2222 w +(If) 1355 2222 w +(several) 1466 2222 w +(semaphores) 1879 2222 w +(are) 2565 2222 w +(ready) 2771 2222 w +(for) 3103 2222 w +(a) 3294 2222 w +(down) 3393 2222 w +(without) 3720 2222 w +(blocking,) 4160 2222 w +(one) 4689 2222 w +(of) 4925 2222 w +(them) 5072 2222 w +(is) 5384 2222 w +(selected) 720 2352 w +(and) 1222 2352 w +(the) 1482 2352 w +(down) 1715 2352 w +(is) 2066 2352 w +(performed;) 2216 2352 w +(the) 2875 2352 w +(function) 3107 2352 w +(returns) 3609 2352 w +(an) 4055 2352 w +(index) 4245 2352 w +(value) 4604 2352 w +(indicating) 4945 2352 w +(which one. If) 720 2482 w +(none) 1439 2482 w +(of) 1739 2482 w +(the) 1882 2482 w +(downs may proceed, the) 2088 2482 w +(operation calls the) 3429 2482 w +(kernel) 4454 2482 w +(and blocks.) 4822 2482 w +(Therefore,) 970 2648 w +(in) 1567 2648 w +(the) 1709 2648 w +(best) 1922 2648 w +(case,) 2192 2648 w 11 /LucidaSans-Italic f -(downsem) 2623 2352 w -11 /LucidaSansUnicode00 f -(is) 3166 2352 w -(performed) 3299 2352 w -(in) 3906 2352 w -(user) 4051 2352 w -(space,) 4327 2352 w -(without) 4711 2352 w -(enter\255) 5158 2352 w -(ing) 720 2482 w -(the) 930 2482 w -(kernel,) 1143 2482 w -(in) 1553 2482 w -(a) 1695 2482 w -(non-determinist) 1798 2482 w -(way.) 2717 2482 w -(In) 3032 2482 w -(the) 3174 2482 w -(worst) 3386 2482 w -(case,) 3721 2482 w -(the) 4032 2482 w -(kernel) 4244 2482 w -(is) 4618 2482 w -(used) 4747 2482 w -(to) 5043 2482 w -(await) 5192 2482 w -(for) 720 2612 w -(a) 924 2612 w -(chance) 1036 2612 w -(to) 1458 2612 w -(down) 1617 2612 w -(one) 1957 2612 w -(of) 2205 2612 w -(the) 2365 2612 w -(semaphores.) 2588 2612 w -(Before) 3323 2612 w -(doing) 3716 2612 w -(so,) 4072 2612 w -(the) 4282 2612 w -(operation) 4505 2612 w -(may) 5069 2612 w -(be) 5341 2612 w -(configured to spin and busy wait) 720 2742 w -(for a) 2506 2742 w -(while.) 2790 2742 w -(Optimistic) 970 2908 w -(semaphores,) 1555 2908 w -(as) 2276 2908 w -(described,) 2431 2908 w -(are) 3024 2908 w -(used) 3230 2908 w -(in) 3523 2908 w -(NIX) 3661 2908 w -(to) 3881 2908 w -(implement) 4028 2908 w -(shared) 4637 2908 w -(memory) 5037 2908 w -(communication channels called) 720 3038 w +(altsems) 2504 2648 w +11 /LucidaSansUnicode00 f +(performs) 2955 2648 w +(a) 3484 2648 w +(down) 3587 2648 w +(in) 3918 2648 w +(user) 4060 2648 w +(space,) 4333 2648 w +(without) 4714 2648 w +(enter\255) 5158 2648 w +(ing) 720 2778 w +(the) 930 2778 w +(kernel,) 1143 2778 w +(in) 1553 2778 w +(a) 1695 2778 w +(non-determinist) 1798 2778 w +(way.) 2717 2778 w +(In) 3032 2778 w +(the) 3174 2778 w +(worst) 3386 2778 w +(case,) 3721 2778 w +(the) 4032 2778 w +(kernel) 4244 2778 w +(is) 4618 2778 w +(used) 4747 2778 w +(to) 5043 2778 w +(await) 5192 2778 w +(for) 720 2908 w +(a) 924 2908 w +(chance) 1036 2908 w +(to) 1458 2908 w +(down) 1617 2908 w +(one) 1957 2908 w +(of) 2205 2908 w +(the) 2365 2908 w +(semaphores.) 2588 2908 w +(Before) 3323 2908 w +(doing) 3716 2908 w +(so,) 4072 2908 w +(the) 4282 2908 w +(operation) 4505 2908 w +(may) 5069 2908 w +(be) 5341 2908 w +(configured to spin and busy wait) 720 3038 w +(for a) 2506 3038 w +(while.) 2790 3038 w +(Optimistic) 970 3204 w +(semaphores,) 1555 3204 w +(as) 2276 3204 w +(described,) 2431 3204 w +(are) 3024 3204 w +(used) 3230 3204 w +(in) 3523 3204 w +(NIX) 3661 3204 w +(to) 3881 3204 w +(implement) 4028 3204 w +(shared) 4637 3204 w +(memory) 5037 3204 w +(communication) 720 3334 w +(channels) 1609 3334 w +(called) 2149 3334 w 11 /LucidaSans-Italic f -(tubes) 2428 3038 w -11 /LucidaSansUnicode00 f -(.) 2717 3038 w -(A) 970 3204 w -(tube) 1087 3204 w -(is) 1368 3204 w -(a) 1497 3204 w -(buffered) 1599 3204 w -(unidirectional) 2097 3204 w -(channel) 2871 3204 w -(where) 3327 3204 w -(fixed-size) 3690 3204 w -(messages) 4280 3204 w -(can) 4845 3204 w -(be) 5072 3204 w -(sent) 5245 3204 w -(and received from it) 720 3334 w -(\(but) 1831 3334 w -(different) 2080 3334 w -(tubes may have) 2576 3334 w -(different) 3445 3334 w -(message) 3941 3334 w -(sizes\).) 4443 3334 w -(The) 970 3500 w -(implementation) 1230 3500 w -(is) 2130 3500 w -(a) 2279 3500 w -(simple) 2401 3500 w -(producer-consumer,) 2815 3500 w -(but,) 3981 3500 w -(because) 4256 3500 w -(of) 4752 3500 w -(the) 4922 3500 w -(sema\255) 5155 3500 w -(phores) 720 3630 w -(used,) 1135 3630 w -(is) 1473 3630 w -(able) 1609 3630 w -(to) 1881 3630 w -(run) 2037 3630 w -(at) 2266 3630 w -(user) 2416 3630 w -(space) 2695 3630 w -(without) 3046 3630 w -(entering) 3495 3630 w -(the) 3988 3630 w -(kernel) 4206 3630 w -(when) 4586 3630 w -(sends) 4916 3630 w -(and) 5274 3630 w -(receives may proceed.) 720 3760 w -(It) 970 3926 w -(is) 1079 3926 w -(feasible) 1203 3926 w -(to) 1654 3926 w -(try) 1798 3926 w -(to) 1977 3926 w -(perform) 2121 3926 w -(multiple) 2588 3926 w -(sends) 3062 3926 w -(and) 3409 3926 w -(receives) 3643 3926 w -(at) 4111 3926 w -(the) 4250 3926 w -(same) 4458 3926 w -(time,) 4776 3926 w -(waiting) 5085 3926 w -(for) 720 4056 w -(the) 911 4056 w -(chance) 1119 4056 w -(to) 1527 4056 w -(execute) 1672 4056 w -(one) 2127 4056 w -(of) 2361 4056 w -(them.) 2506 4056 w -(This) 2851 4056 w -(operation) 3113 4056 w -(exploits) 3662 4056 w -(the) 4125 4056 w -(semantics) 4333 4056 w -(and) 4904 4056 w -(imple\255) 5139 4056 w -(mentation) 720 4186 w -(of) 1304 4186 w +(tubes) 2530 3334 w +11 /LucidaSansUnicode00 f +(.) 2819 3334 w +(A) 2958 3334 w +(tube) 3103 3334 w +(is) 3411 3334 w +(a) 3567 3334 w +(buffered) 3696 3334 w +(unidirectional) 4221 3334 w +(channel.) 5022 3334 w +(Fixed-size) 720 3464 w +(messages) 1324 3464 w +(can) 1885 3464 w +(be) 2108 3464 w +(sent) 2277 3464 w +(and) 2542 3464 w +(received) 2778 3464 w +(from) 3261 3464 w +(it) 3554 3464 w +(\(but) 3665 3464 w +(different) 3917 3464 w +(tubes) 4416 3464 w +(may) 4750 3464 w +(have) 5008 3464 w +(dif\255) 5294 3464 w +(ferent) 720 3594 w +(message) 1074 3594 w +(sizes\).) 1576 3594 w +(The) 970 3760 w +(implementation) 1230 3760 w +(is) 2130 3760 w +(a) 2279 3760 w +(simple) 2401 3760 w +(producer-consumer,) 2815 3760 w +(but,) 3981 3760 w +(because) 4256 3760 w +(of) 4752 3760 w +(the) 4922 3760 w +(sema\255) 5155 3760 w +(phores) 720 3890 w +(used,) 1127 3890 w +(it) 1457 3890 w +(is) 1570 3890 w +(able) 1698 3890 w +(to) 1962 3890 w +(run) 2110 3890 w +(at) 2331 3890 w +(user) 2473 3890 w +(space) 2744 3890 w +(without) 3088 3890 w +(entering) 3530 3890 w +(the) 4016 3890 w +(kernel) 4227 3890 w +(when) 4600 3890 w +(sends) 4923 3890 w +(and) 5274 3890 w +(receives may proceed.) 720 4020 w +(It) 970 4186 w +(is) 1079 4186 w +(feasible) 1203 4186 w +(to) 1654 4186 w +(try) 1798 4186 w +(to) 1977 4186 w +(perform) 2121 4186 w +(multiple) 2588 4186 w +(sends) 3062 4186 w +(and) 3409 4186 w +(receives) 3643 4186 w +(at) 4111 4186 w +(the) 4250 4186 w +(same) 4458 4186 w +(time,) 4776 4186 w +(waiting) 5085 4186 w +(for) 720 4316 w +(the) 926 4316 w +(chance) 1149 4316 w +(to) 1572 4316 w +(execute) 1732 4316 w +(one) 2202 4316 w +(of) 2451 4316 w +(them.) 2611 4316 w +(This) 2971 4316 w +(operation) 3248 4316 w +(exploits) 3812 4316 w 11 /LucidaSans-Italic f -(altsems) 1454 4186 w -11 /LucidaSansUnicode00 f -(to) 1905 4186 w -(operate) 2055 4186 w -(at) 2504 4186 w -(user-level) 2648 4186 w -(if) 3230 4186 w -(possible,) 3345 4186 w -(and) 3865 4186 w -(call) 4105 4186 w -(the) 4329 4186 w -(kernel) 4543 4186 w -(otherwise.) 4919 4186 w -(It) 720 4316 w -(suffices) 830 4316 w -(to) 1279 4316 w -(fill) 1424 4316 w -(an) 1598 4316 w -(array) 1764 4316 w -(of) 2070 4316 w -(semaphores) 2214 4316 w -(with) 2898 4316 w -(either) 3160 4316 w -(the) 3506 4316 w -(ones) 3713 4316 w -(representing) 4002 4316 w -(messages) 4716 4316 w -(in) 5275 4316 w -(a) 5411 4316 w -(tube,) 720 4446 w -(or) 1032 4446 w -(the) 1181 4446 w -(ones) 1389 4446 w -(representing) 1679 4446 w -(empty) 2394 4446 w -(slots) 2762 4446 w -(in) 3051 4446 w -(a) 3188 4446 w -(tube,) 3287 4446 w -(depending) 3600 4446 w -(on) 4205 4446 w -(whether) 4378 4446 w -(a) 4847 4446 w -(receive) 4946 4446 w -(or) 5360 4446 w -(a) 720 4576 w -(send) 836 4576 w -(operation) 1146 4576 w -(is) 1713 4576 w -(selected.) 1856 4576 w -(Then,) 2386 4576 w -(calling) 2743 4576 w +(altsems) 4290 4316 w +11 /LucidaSansUnicode00 f +(to) 4751 4316 w +(operate) 4911 4316 w +(at) 5370 4316 w +(user-level) 720 4446 w +(if) 1307 4446 w +(possible,) 1427 4446 w +(calling) 1952 4446 w +(the) 2348 4446 w +(kernel) 2566 4446 w +(otherwise.) 2947 4446 w +(It) 3583 4446 w +(suffices) 3704 4446 w +(to) 4164 4446 w +(fill) 4320 4446 w +(an) 4505 4446 w +(array) 4682 4446 w +(of) 4999 4446 w +(sema\255) 5155 4446 w +(phores) 720 4576 w +(with) 1132 4576 w +(either) 1403 4576 w +(the) 1757 4576 w +(ones) 1972 4576 w +(representing) 2269 4576 w +(messages) 2991 4576 w +(in) 3558 4576 w +(a) 3702 4576 w +(tube,) 3807 4576 w +(or) 4126 4576 w +(the) 4282 4576 w +(ones) 4497 4576 w +(representing) 4794 4576 w +(empty) 720 4706 w +(slots) 1095 4706 w +(in) 1391 4706 w +(a) 1535 4706 w +(tube,) 1640 4706 w +(depending) 1959 4706 w +(on) 2570 4706 w +(whether) 2749 4706 w +(a) 3224 4706 w +(receive) 3329 4706 w +(or) 3749 4706 w +(a) 3905 4706 w +(send) 4010 4706 w +(operation) 4309 4706 w +(is) 4865 4706 w +(selected.) 4997 4706 w +(Then, calling) 720 4836 w 11 /LucidaSans-Italic f -(altsems) 3147 4576 w -11 /LucidaSansUnicode00 f -(guarantees) 3611 4576 w -(that,) 4257 4576 w -(upon) 4557 4576 w -(return,) 4883 4576 w -(the) 5301 4576 w -(operation may proceed.) 720 4706 w +(altsems) 1441 4836 w +11 /LucidaSansUnicode00 f +(guarantees that, upon return, the) 1885 4836 w +(operation may proceed.) 3705 4836 w 11 /LucidaSans-Demi f -(6.) 720 4966 w -(Implementation) 888 4966 w -11 /LucidaSansUnicode00 f -(As) 720 5132 w -(of) 893 5132 w -(today,) 1042 5132 w -(the) 1413 5132 w -(kernel) 1625 5132 w -(is) 1999 5132 w -(operational,) 2128 5132 w -(although) 2809 5132 w -(not) 3323 5132 w -(in) 3540 5132 w -(production.) 3681 5132 w -(More) 4339 5132 w -(work) 4649 5132 w -(is) 4951 5132 w -(needed) 5080 5132 w -(in) 720 5262 w -(system) 866 5262 w -(interfaces,) 1286 5262 w -(role) 1891 5262 w -(changing,) 2143 5262 w -(and) 2713 5262 w -(memory) 2957 5262 w -(management;) 3438 5262 w -(but) 4213 5262 w -(the) 4436 5262 w -(kernel) 4652 5262 w -(is) 5030 5262 w -(active) 5163 5262 w -(enough to be) 720 5392 w -(used, at) 1465 5392 w -(least) 1927 5392 w -(for testing.) 2214 5392 w -(We) 970 5558 w -(have) 1163 5558 w -(changed) 1447 5558 w -(a) 1935 5558 w -(surprisingly) 2032 5558 w -(small) 2696 5558 w -(amount) 3016 5558 w -(of) 3460 5558 w -(code) 3605 5558 w -(at) 3896 5558 w -(this) 4035 5558 w -(point.) 4269 5558 w -(There) 4618 5558 w -(are) 4961 5558 w -(about) 5166 5558 w -(400) 720 5688 w -(lines) 977 5688 w -(of) 1277 5688 w -(new) 1435 5688 w -(assembler) 1700 5688 w -(source,) 2295 5688 w -(about) 2734 5688 w -(80) 3089 5688 w -(lines) 3276 5688 w -(of) 3575 5688 w -(platform) 3732 5688 w -(independent) 4239 5688 w -(C) 4958 5688 w -(source,) 5083 5688 w -(and) 720 5818 w -(about) 975 5818 w -(350) 1338 5818 w -(lines) 1602 5818 w -(of) 1909 5818 w -(AMD64) 2074 5818 w -(C) 2523 5818 w -(source) 2656 5818 w -(code.) 3067 5818 w -(To) 3413 5818 w -(this,) 3607 5818 w -(we) 3897 5818 w -(have) 4102 5818 w -(to) 4408 5818 w -(add) 4574 5818 w -(a) 4831 5818 w -(few) 4950 5818 w -(extra) 5196 5818 w -(source) 720 5948 w -(lines in the) 1110 5948 w -(start-up code, system call, and trap handlers.) 1736 5948 w -(This implementation is) 4250 5948 w -(being both developed and tested only in the) 720 6078 w -(AMD64 architecture.) 3117 6078 w -(We) 970 6244 w -(found) 1171 6244 w -(that) 1528 6244 w -(there) 1783 6244 w -(seems) 2105 6244 w -(to) 2487 6244 w -(be) 2639 6244 w -(no) 2814 6244 w -(performance) 2993 6244 w -(penalty) 3715 6244 w -(for) 4149 6244 w -(pre-paging,) 4346 6244 w -(which) 5031 6244 w -(is) 5384 6244 w -(interesting on its own.) 720 6374 w -(To) 970 6540 w -(dispatch) 1157 6540 w -(a) 1660 6540 w -(process) 1772 6540 w -(for) 2234 6540 w -(execution) 2438 6540 w -(at) 3012 6540 w -(one) 3165 6540 w -(AC,) 3414 6540 w -(we) 3653 6540 w -(use) 3852 6540 w -(the) 4090 6540 w -(inter) 4313 6540 w -(core) 4613 6540 w -(call,) 4895 6540 w -(active) 5163 6540 w -(message,) 720 6670 w -(mechanism.) 1282 6670 w -(The) 2019 6670 w -(figure) 2278 6670 w -(shows) 2654 6670 w -(the) 3046 6670 w -(inter-core-call) 3277 6670 w -(or) 4123 6670 w -(ICC) 4294 6670 w -(mechanism.) 4537 6670 w -(The) 5273 6670 w -(function) 720 6800 w -11 /LucidaSans-Italic f -(acsched) 1211 6800 w -11 /LucidaSansUnicode00 f -(runs) 1686 6800 w -(on) 1974 6800 w -(ACs,) 2160 6800 w -(as) 2454 6800 w -(part) 2622 6800 w -(of) 2889 6800 w -(its) 3048 6800 w -(start-up) 3228 6800 w -(sequence.) 3724 6800 w -(It) 4313 6800 w -(sits) 4437 6800 w -(in) 4673 6800 w -(a) 4824 6800 w -(tight) 4936 6800 w -(loop) 5237 6800 w -(spinning) 720 6930 w -(on) 1231 6930 w -(an) 1416 6930 w -(active) 1594 6930 w -(message) 1952 6930 w -(function) 2468 6930 w -(pointer.) 2958 6930 w -(To) 3426 6930 w -(ask) 3611 6930 w -(the) 3841 6930 w -(AC) 4061 6930 w -(to) 4262 6930 w -(execute) 4419 6930 w -(a) 4886 6930 w -(function,) 4996 6930 w -(the) 720 7060 w -(TC) 929 7060 w -(sets) 1112 7060 w -(in) 1365 7060 w -(the) 1503 7060 w -(ICC) 1712 7060 w -(structure) 1935 7060 w -(for) 2456 7060 w -(the) 2648 7060 w -(AC) 2858 7060 w -(the) 3049 7060 w -(arguments,) 3259 7060 w -(indication) 3904 7060 w -(to) 4469 7060 w -(flush) 4616 7060 w -(the) 4920 7060 w -(TLB) 5130 7060 w -(or) 5360 7060 w -(not,) 720 7190 w -(and) 970 7190 w -(the) 1207 7190 w -(function) 1417 7190 w -(pointer) 1897 7190 w -(and) 2320 7190 w -(then) 2557 7190 w -(changes) 2835 7190 w -(the) 3313 7190 w -(process) 3523 7190 w -(state) 3973 7190 w -(to) 4273 7190 w -11 /LucidaSans-Italic f -(Exotic) 4419 7190 w -11 /LucidaSansUnicode00 f -(,) 4731 7190 w -(which) 4804 7190 w -(would) 5151 7190 w -(block) 720 7320 w -(the) 1047 7320 w -(process) 1258 7320 w -(for) 1709 7320 w -(the) 1902 7320 w -(moment.) 2113 7320 w -(When) 2665 7320 w -(the) 2998 7320 w -(pointer) 3209 7320 w -(becomes) 3633 7320 w -(non-nil,) 4147 7320 w -(the) 4621 7320 w -(AC) 4832 7320 w -(calls) 5024 7320 w -(the) 5301 7320 w +(6.) 720 5096 w +(Implementation) 888 5096 w +11 /LucidaSansUnicode00 f +(As) 720 5262 w +(of) 893 5262 w +(today,) 1042 5262 w +(the) 1413 5262 w +(kernel) 1625 5262 w +(is) 1999 5262 w +(operational,) 2128 5262 w +(although) 2809 5262 w +(not) 3323 5262 w +(in) 3540 5262 w +(production.) 3681 5262 w +(More) 4339 5262 w +(work) 4649 5262 w +(is) 4951 5262 w +(needed) 5080 5262 w +(in) 720 5392 w +(system) 866 5392 w +(interfaces,) 1286 5392 w +(role) 1891 5392 w +(changing,) 2143 5392 w +(and) 2713 5392 w +(memory) 2957 5392 w +(management;) 3438 5392 w +(but) 4213 5392 w +(the) 4436 5392 w +(kernel) 4652 5392 w +(is) 5030 5392 w +(active) 5163 5392 w +(enough to be) 720 5522 w +(used, at) 1465 5522 w +(least) 1927 5522 w +(for testing.) 2214 5522 w +(We) 970 5688 w +(have) 1163 5688 w +(changed) 1447 5688 w +(a) 1935 5688 w +(surprisingly) 2032 5688 w +(small) 2696 5688 w +(amount) 3016 5688 w +(of) 3460 5688 w +(code) 3605 5688 w +(at) 3896 5688 w +(this) 4035 5688 w +(point.) 4269 5688 w +(There) 4618 5688 w +(are) 4961 5688 w +(about) 5166 5688 w +(400) 720 5818 w +(lines) 977 5818 w +(of) 1277 5818 w +(new) 1435 5818 w +(assembler) 1700 5818 w +(source,) 2295 5818 w +(about) 2734 5818 w +(80) 3089 5818 w +(lines) 3276 5818 w +(of) 3575 5818 w +(platform) 3732 5818 w +(independent) 4239 5818 w +(C) 4958 5818 w +(source,) 5083 5818 w +(and) 720 5948 w +(about) 975 5948 w +(350) 1338 5948 w +(lines) 1602 5948 w +(of) 1909 5948 w +(AMD64) 2074 5948 w +(C) 2523 5948 w +(source) 2656 5948 w +(code.) 3067 5948 w +(To) 3413 5948 w +(this,) 3607 5948 w +(we) 3897 5948 w +(have) 4102 5948 w +(to) 4408 5948 w +(add) 4574 5948 w +(a) 4831 5948 w +(few) 4950 5948 w +(extra) 5196 5948 w +(source) 720 6078 w +(lines in the) 1110 6078 w +(start-up code, system call, and trap handlers.) 1736 6078 w +(This implementation is) 4250 6078 w +(being both developed and tested only in the) 720 6208 w +(AMD64 architecture.) 3117 6208 w +(We) 970 6374 w +(found) 1171 6374 w +(that) 1528 6374 w +(there) 1783 6374 w +(seems) 2105 6374 w +(to) 2487 6374 w +(be) 2639 6374 w +(no) 2814 6374 w +(performance) 2993 6374 w +(penalty) 3715 6374 w +(for) 4149 6374 w +(pre-paging,) 4346 6374 w +(which) 5031 6374 w +(is) 5384 6374 w +(interesting on its own.) 720 6504 w +(To) 970 6670 w +(dispatch) 1158 6670 w +(a) 1662 6670 w +(process) 1775 6670 w +(for) 2238 6670 w +(execution) 2443 6670 w +(at) 3018 6670 w +(one) 3172 6670 w +(AC) 3421 6670 w +(we) 3625 6670 w +(use) 3825 6670 w +(the) 4064 6670 w +(inter-core-call,) 4288 6670 w +(active) 5163 6670 w +(message, mechanism. This figure) 720 6800 w +(explains how) 2545 6800 w +(it) 3282 6800 w +(works:) 3390 6800 w cleartomark showpage saveobj restore @@ -4313,444 +4185,530 @@ /saveobj save def mark 7 pagesetup -11 /LucidaSansUnicode00 f -(function.) 720 850 w -(The) 1269 850 w -(function) 1506 850 w -(pointer) 1985 850 w -(uses) 2407 850 w -(a) 2687 850 w -(cache) 2786 850 w -(line) 3127 850 w -(and) 3359 850 w -(all) 3595 850 w -(other) 3758 850 w -(arguments) 4079 850 w -(use) 4688 850 w -(a) 4912 850 w -(different) 5011 850 w -(cache) 720 980 w -(line,) 1070 980 w -(so) 1346 980 w -(that) 1517 980 w -(polling) 1776 980 w -(can) 2192 980 w -(be) 2425 980 w -(efficient) 2604 980 w -(regarding) 3087 980 w -(bus) 3653 980 w -(transactions.) 3894 980 w -(Once) 4664 980 w -(the) 4984 980 w -(func\255) 5203 980 w -(tion) 720 1110 w -(is) 970 1110 w -(done,) 1100 1110 w -(the) 1443 1110 w -(AC) 1656 1110 w -(sets) 1850 1110 w -(the) 2107 1110 w -(function) 2320 1110 w -(pointer) 2803 1110 w -(to) 3229 1110 w -(nil) 3379 1110 w -(and) 3553 1110 w -(calls) 3793 1110 w +2376 1570 2376 1210 Dl +2376 1210 2916 1210 Dl +2916 1210 2916 1570 Dl +2916 1570 2376 1570 Dl +11 /LucidaSansUnicode00 f +(runac) 2497 1412 w +2988 1372 2916 1390 Dl +2988 1408 2916 1390 Dl +8 /LucidaSansUnicode00 f +(.) 2905 1393 w +(.) 2941 1393 w +(.) 2977 1393 w +(.) 3013 1393 w +(.) 3049 1393 w +(.) 3085 1393 w +(.) 3121 1393 w +(.) 3157 1393 w +(.) 3193 1393 w +(.) 3229 1393 w +(.) 3265 1393 w +3204 1408 3276 1390 Dl +3204 1372 3276 1390 Dl +3276 1570 3276 1210 Dl +3276 1210 3816 1210 Dl +3816 1210 3816 1570 Dl +3816 1570 3276 1570 Dl +11 /LucidaSansUnicode00 f +(acsched) 3332 1412 w +(TC) 2574 1052 w +(AC) 3470 1052 w +(The) 720 1820 w +(function) 955 1820 w 11 /LucidaSans-Italic f -(ready) 4072 1110 w -11 /LucidaSansUnicode00 f -(on) 4420 1110 w -(the) 4597 1110 w -(process) 4809 1110 w -(that) 5261 1110 w -(scheduled the) 720 1240 w -(function for execution.) 1503 1240 w -(You think) 2795 1240 w -(of) 3341 1240 w -(this as a) 3484 1240 w -(soft) 3964 1240 w -(IPI.) 4204 1240 w -2376 2135 2376 1775 Dl -2376 1775 2916 1775 Dl -2916 1775 2916 2135 Dl -2916 2135 2376 2135 Dl -(runac) 2497 1977 w -2988 1937 2916 1955 Dl -2988 1973 2916 1955 Dl +(acsched) 1432 1820 w +11 /LucidaSansUnicode00 f +(runs) 1892 1820 w +(on) 2165 1820 w +(ACs,) 2336 1820 w +(as) 2615 1820 w +(part) 2768 1820 w +(of) 3020 1820 w +(its) 3164 1820 w +(start-up) 3329 1820 w +(sequence.) 3810 1820 w +(It) 4384 1820 w +(sits) 4493 1820 w +(in) 4715 1820 w +(a) 4852 1820 w +(tight) 4950 1820 w +(loop) 5237 1820 w +(spinning) 720 1950 w +(on) 1231 1950 w +(an) 1416 1950 w +(active) 1594 1950 w +(message) 1952 1950 w +(function) 2468 1950 w +(pointer.) 2958 1950 w +(To) 3426 1950 w +(ask) 3611 1950 w +(the) 3841 1950 w +(AC) 4061 1950 w +(to) 4262 1950 w +(execute) 4419 1950 w +(a) 4886 1950 w +(function,) 4996 1950 w +(the) 720 2080 w +(TC) 929 2080 w +(sets) 1112 2080 w +(in) 1365 2080 w +(the) 1503 2080 w +(ICC) 1712 2080 w +(structure) 1935 2080 w +(for) 2456 2080 w +(the) 2648 2080 w +(AC) 2858 2080 w +(the) 3049 2080 w +(arguments,) 3259 2080 w +(indication) 3904 2080 w +(to) 4469 2080 w +(flush) 4616 2080 w +(the) 4920 2080 w +(TLB) 5130 2080 w +(or) 5360 2080 w +(not,) 720 2210 w +(and) 970 2210 w +(the) 1207 2210 w +(function) 1417 2210 w +(pointer) 1897 2210 w +(and) 2320 2210 w +(then) 2557 2210 w +(changes) 2835 2210 w +(the) 3313 2210 w +(process) 3523 2210 w +(state) 3973 2210 w +(to) 4273 2210 w +11 /LucidaSans-Italic f +(Exotic) 4419 2210 w +11 /LucidaSansUnicode00 f +(,) 4731 2210 w +(which) 4804 2210 w +(would) 5151 2210 w +(block) 720 2340 w +(the) 1047 2340 w +(process) 1258 2340 w +(for) 1709 2340 w +(the) 1902 2340 w +(moment.) 2113 2340 w +(When) 2665 2340 w +(the) 2998 2340 w +(pointer) 3209 2340 w +(becomes) 3633 2340 w +(non-nil,) 4147 2340 w +(the) 4621 2340 w +(AC) 4832 2340 w +(calls) 5024 2340 w +(the) 5301 2340 w +(function.) 720 2470 w +(The) 1269 2470 w +(function) 1506 2470 w +(pointer) 1985 2470 w +(uses) 2407 2470 w +(a) 2687 2470 w +(cache) 2786 2470 w +(line) 3127 2470 w +(and) 3359 2470 w +(all) 3595 2470 w +(other) 3758 2470 w +(arguments) 4079 2470 w +(use) 4688 2470 w +(a) 4912 2470 w +(different) 5011 2470 w +(cache) 720 2600 w +(line,) 1070 2600 w +(so) 1346 2600 w +(that) 1517 2600 w +(polling) 1776 2600 w +(can) 2192 2600 w +(be) 2425 2600 w +(efficient) 2604 2600 w +(regarding) 3087 2600 w +(bus) 3653 2600 w +(transactions.) 3894 2600 w +(Once) 4664 2600 w +(the) 4984 2600 w +(func\255) 5203 2600 w +(tion) 720 2730 w +(is) 970 2730 w +(done,) 1100 2730 w +(the) 1443 2730 w +(AC) 1656 2730 w +(sets) 1850 2730 w +(the) 2107 2730 w +(function) 2320 2730 w +(pointer) 2803 2730 w +(to) 3229 2730 w +(nil) 3379 2730 w +(and) 3553 2730 w +(calls) 3793 2730 w +11 /LucidaSans-Italic f +(ready) 4072 2730 w +11 /LucidaSansUnicode00 f +(on) 4420 2730 w +(the) 4597 2730 w +(process) 4809 2730 w +(that) 5261 2730 w +(scheduled the) 720 2860 w +(function for execution.) 1503 2860 w +(You think) 2795 2860 w +(of) 3341 2860 w +(this as a) 3484 2860 w +(soft) 3964 2860 w +(IPI.) 4204 2860 w +(While) 970 3026 w +(an) 1296 3026 w +(AC) 1462 3026 w +(is) 1651 3026 w +(performing) 1776 3026 w +(an) 2412 3026 w +(action) 2578 3026 w +(dictated) 2940 3026 w +(by) 3408 3026 w +(a) 3571 3026 w +(process) 3670 3026 w +(in) 4119 3026 w +(the) 4257 3026 w +(TC,) 4466 3026 w +(its) 4684 3026 w +11 /LucidaSans-Italic f +(Mach) 4851 3026 w +11 /LucidaSansUnicode00 f +(struc\255) 5170 3026 w +(ture) 720 3156 w +(points) 976 3156 w +(to) 1348 3156 w +(the) 1495 3156 w +(process) 1705 3156 w +(so) 2155 3156 w +(that) 2317 3156 w +11 /LucidaSans-Italic f +(up) 2567 3156 w +11 /LucidaSansUnicode00 f +(in) 2741 3156 w +(the) 2880 3156 w +(AC) 3090 3156 w +(refers) 3281 3156 w +(to) 3631 3156 w +(the) 3778 3156 w +(process.) 3988 3156 w +(The) 4473 3156 w +(process) 4711 3156 w +(refers) 5161 3156 w +(to) 720 3286 w +(the) 866 3286 w +(AC) 1075 3286 w +(via) 1265 3286 w +(a) 1453 3286 w +(new) 1552 3286 w +(field) 1805 3286 w +11 /LucidaSans-Italic f +(Mach.ac) 2079 3286 w +11 /LucidaSansUnicode00 f +(.) 2517 3286 w +(Should) 2625 3286 w +(the) 3026 3286 w +(AC) 3235 3286 w +(become) 3425 3286 w +(idle,) 3881 3286 w +(its) 4150 3286 w +11 /LucidaSans-Italic f +(Mach.proc) 4318 3286 w +11 /LucidaSansUnicode00 f +(field) 4911 3286 w +(is) 5186 3286 w +(set) 5313 3286 w +(to nil.) 720 3416 w +(This) 970 3582 w +(mechanism) 1234 3582 w +(is) 1881 3582 w +(kind) 2009 3582 w +(of) 2282 3582 w +(like) 2430 3582 w +(a) 2660 3582 w +(vm_exit\(\).) 2761 3582 w +(While) 3359 3582 w +(we) 3688 3582 w +(could) 3875 3582 w +(think) 4207 3582 w +(about) 4520 3582 w +(implement\255) 4866 3582 w +(ing) 720 3712 w +(this) 936 3712 w +(with) 1181 3712 w +(vm_enter\(\),) 1455 3712 w +(it) 2102 3712 w +11 /LucidaSansUnicode20 f +(\031) 2175 3712 w +11 /LucidaSansUnicode00 f +(s) 2210 3712 w +(not) 2314 3712 w +(quite) 2538 3712 w +(clear) 2858 3712 w +(we) 3161 3712 w +(should) 3355 3712 w +(take) 3762 3712 w +(that) 4037 3712 w +(step.) 4295 3712 w +(VMs) 4640 3712 w +(have) 4910 3712 w +(over\255) 5205 3712 w +(head,) 720 3842 w +(at) 1064 3842 w +(least) 1216 3842 w +(when) 1518 3842 w +(compared) 1851 3842 w +(to) 2432 3842 w +(the) 2590 3842 w +(mechanism) 2811 3842 w +(we) 3468 3842 w +(use.) 3665 3842 w +(This) 3971 3842 w +(mechanism) 4246 3842 w +(is) 4903 3842 w +(used) 5041 3842 w +(by) 5346 3842 w +(NIX to dispatch processes to ACs, as shown:) 720 3972 w +1926 4507 1926 4147 Dl +1926 4147 2466 4147 Dl +2466 4147 2466 4507 Dl +2466 4507 1926 4507 Dl +(user code) 1936 4349 w +2196 4507 2196 4867 Dl +2178 4795 2196 4867 Dl +2214 4795 2196 4867 Dl +1926 5227 1926 4867 Dl +1926 4867 2466 4867 Dl +2466 4867 2466 5227 Dl +2466 5227 1926 5227 Dl +(execac) 2014 5069 w +2466 5047 2826 5047 Dl +2754 5065 2826 5047 Dl +2754 5029 2826 5047 Dl +2826 5227 2826 4867 Dl +2826 4867 3366 4867 Dl +3366 4867 3366 5227 Dl +3366 5227 2826 5227 Dl +(runacore) 2860 5069 w 8 /LucidaSansUnicode00 f -(.) 2905 1958 w -(.) 2941 1958 w -(.) 2977 1958 w -(.) 3013 1958 w -(.) 3049 1958 w -(.) 3085 1958 w -(.) 3121 1958 w -(.) 3157 1958 w -(.) 3193 1958 w -(.) 3229 1958 w -(.) 3265 1958 w -3204 1973 3276 1955 Dl -3204 1937 3276 1955 Dl -3276 2135 3276 1775 Dl -3276 1775 3816 1775 Dl -3816 1775 3816 2135 Dl -3816 2135 3276 2135 Dl -11 /LucidaSansUnicode00 f -(acsched) 3332 1977 w -(TC) 2574 1617 w -(AC) 3470 1617 w -(While) 720 2385 w -(an) 1050 2385 w -(AC) 1220 2385 w -(is) 1413 2385 w -(performing) 1543 2385 w -(an) 2184 2385 w -(action) 2355 2385 w -(dictated) 2722 2385 w -(by) 3195 2385 w -(a) 3363 2385 w -(process) 3466 2385 w -(in) 3919 2385 w -(the) 4061 2385 w -(TC,) 4274 2385 w -(its) 4496 2385 w +(.) 3355 5050 w +(.) 3391 5050 w +(.) 3427 5050 w +(.) 3463 5050 w +(.) 3499 5050 w +(.) 3535 5050 w +(.) 3571 5050 w +(.) 3607 5050 w +(.) 3643 5050 w +(.) 3679 5050 w +(.) 3715 5050 w +3654 5065 3726 5047 Dl +3654 5029 3726 5047 Dl +3726 5227 3726 4867 Dl +3726 4867 4266 4867 Dl +4266 4867 4266 5227 Dl +4266 5227 3726 5227 Dl +11 /LucidaSansUnicode00 f +(actouser) 3768 5069 w +3996 4867 3996 4507 Dl +4014 4579 3996 4507 Dl +3978 4579 3996 4507 Dl +3726 4507 3726 4147 Dl +3726 4147 4266 4147 Dl +4266 4147 4266 4507 Dl +4266 4507 3726 4507 Dl +(user code) 3736 4349 w +(A) 720 5477 w +(process) 855 5477 w +(that) 1325 5477 w +(calls) 1595 5477 w +(the) 1891 5477 w +(new) 2122 5477 w +(system) 2397 5477 w +(call,) 2831 5477 w 11 /LucidaSans-Italic f -(Mach) 4667 2385 w -11 /LucidaSansUnicode00 f -(structure) 4990 2385 w -(points) 720 2515 w -(to) 1099 2515 w -(the) 1253 2515 w -(process) 1470 2515 w -(so) 1927 2515 w -(that) 2096 2515 w +(execac) 3107 5477 w +11 /LucidaSansUnicode00 f +(\(or) 3519 5477 w +(uses) 3727 5477 w +(the) 4029 5477 w 11 /LucidaSans-Italic f -(up) 2353 2515 w -11 /LucidaSansUnicode00 f -(in) 2534 2515 w -(the) 2679 2515 w -(AC) 2895 2515 w -(refers) 3092 2515 w -(to) 3448 2515 w -(the) 3601 2515 w -(process.) 3817 2515 w -(The) 4308 2515 w -(process) 4552 2515 w -(refers) 5008 2515 w -(to) 5364 2515 w -(the) 720 2645 w -(AC) 929 2645 w -(via) 1119 2645 w -(a) 1307 2645 w -(new) 1406 2645 w -(field) 1659 2645 w +(RFCORE) 4260 5477 w +11 /LucidaSansUnicode00 f +(flag) 4739 5477 w +(in) 5001 5477 w 11 /LucidaSans-Italic f -(Mach.ac) 1933 2645 w -11 /LucidaSansUnicode00 f -(.) 2371 2645 w -(Should) 2479 2645 w -(the) 2880 2645 w -(AC) 3089 2645 w -(become) 3279 2645 w -(idle,) 3735 2645 w -(its) 4003 2645 w +(rfork) 5161 5477 w +11 /LucidaSansUnicode00 f +(\)) 5436 5477 w +(makes) 720 5607 w +(the) 1112 5607 w +(kernel) 1330 5607 w +(call) 1710 5607 w 11 /LucidaSans-Italic f -(Mach.proc) 4171 2645 w -11 /LucidaSansUnicode00 f -(field) 4764 2645 w -(is) 5039 2645 w -(set) 5166 2645 w -(to) 5364 2645 w -(nil.) 720 2775 w -(This) 970 2941 w -(mechanism) 1234 2941 w -(is) 1881 2941 w -(kind) 2009 2941 w -(of) 2282 2941 w -(like) 2430 2941 w -(a) 2660 2941 w -(vm_exit\(\).) 2761 2941 w -(While) 3359 2941 w -(we) 3688 2941 w -(could) 3875 2941 w -(think) 4207 2941 w -(about) 4520 2941 w -(implement\255) 4866 2941 w -(ing) 720 3071 w -(this) 936 3071 w -(with) 1181 3071 w -(vm_enter\(\),) 1455 3071 w -(it) 2102 3071 w -11 /LucidaSansUnicode20 f -(\031) 2175 3071 w -11 /LucidaSansUnicode00 f -(s) 2210 3071 w -(not) 2314 3071 w -(quite) 2538 3071 w -(clear) 2858 3071 w -(we) 3161 3071 w -(should) 3355 3071 w -(take) 3762 3071 w -(that) 4037 3071 w -(step.) 4295 3071 w -(VMs) 4640 3071 w -(have) 4910 3071 w -(over\255) 5205 3071 w -(head,) 720 3201 w -(at) 1064 3201 w -(least) 1216 3201 w -(when) 1518 3201 w -(compared) 1851 3201 w -(to) 2432 3201 w -(the) 2590 3201 w -(mechanism) 2811 3201 w -(we) 3468 3201 w -(use.) 3665 3201 w -(This) 3971 3201 w -(mechanism) 4246 3201 w -(is) 4903 3201 w -(used) 5041 3201 w -(by) 5346 3201 w -(NIX to dispatch processes to ACs, as shown:) 720 3331 w -1926 3866 1926 3506 Dl -1926 3506 2466 3506 Dl -2466 3506 2466 3866 Dl -2466 3866 1926 3866 Dl -(user code) 1936 3708 w -2196 3866 2196 4226 Dl -2178 4154 2196 4226 Dl -2214 4154 2196 4226 Dl -1926 4586 1926 4226 Dl -1926 4226 2466 4226 Dl -2466 4226 2466 4586 Dl -2466 4586 1926 4586 Dl -(execac) 2014 4428 w -2466 4406 2826 4406 Dl -2754 4424 2826 4406 Dl -2754 4388 2826 4406 Dl -2826 4586 2826 4226 Dl -2826 4226 3366 4226 Dl -3366 4226 3366 4586 Dl -3366 4586 2826 4586 Dl -(runacore) 2860 4428 w -8 /LucidaSansUnicode00 f -(.) 3355 4409 w -(.) 3391 4409 w -(.) 3427 4409 w -(.) 3463 4409 w -(.) 3499 4409 w -(.) 3535 4409 w -(.) 3571 4409 w -(.) 3607 4409 w -(.) 3643 4409 w -(.) 3679 4409 w -(.) 3715 4409 w -3654 4424 3726 4406 Dl -3654 4388 3726 4406 Dl -3726 4586 3726 4226 Dl -3726 4226 4266 4226 Dl -4266 4226 4266 4586 Dl -4266 4586 3726 4586 Dl -11 /LucidaSansUnicode00 f -(actouser) 3768 4428 w -3996 4226 3996 3866 Dl -4014 3938 3996 3866 Dl -3978 3938 3996 3866 Dl -3726 3866 3726 3506 Dl -3726 3506 4266 3506 Dl -4266 3506 4266 3866 Dl -4266 3866 3726 3866 Dl -(user code) 3736 3708 w -(A) 720 4836 w -(process) 855 4836 w -(that) 1325 4836 w -(calls) 1595 4836 w -(the) 1891 4836 w -(new) 2122 4836 w -(system) 2397 4836 w -(call,) 2831 4836 w +(runacore) 1938 5607 w +11 /LucidaSansUnicode00 f +(in) 2470 5607 w +(the) 2617 5607 w +(context) 2835 5607 w +(of) 3284 5607 w +(the) 3439 5607 w +(process.) 3657 5607 w +(This) 4150 5607 w +(function) 4422 5607 w +(makes) 4910 5607 w +(the) 5301 5607 w +(process) 720 5737 w +(become) 1172 5737 w +(a) 1631 5737 w +(handler) 1733 5737 w +(for) 2179 5737 w +(the) 2373 5737 w +(actual) 2585 5737 w +(process,) 2945 5737 w +(which) 3432 5737 w +(would) 3783 5737 w +(be) 4146 5737 w +(running) 4319 5737 w +(from) 4778 5737 w +(now) 5075 5737 w +(on) 5337 5737 w +(on) 720 5867 w +(the) 895 5867 w +(AC.) 1106 5867 w +(To) 1368 5867 w +(do) 1544 5867 w +(so,) 1720 5867 w 11 /LucidaSans-Italic f -(execac) 3107 4836 w -11 /LucidaSansUnicode00 f -(\(or) 3519 4836 w -(uses) 3727 4836 w -(the) 4029 4836 w +(runacore) 1918 5867 w +11 /LucidaSansUnicode00 f +(calls) 2443 5867 w 11 /LucidaSans-Italic f -(RFCORE) 4260 4836 w -11 /LucidaSansUnicode00 f -(flag) 4739 4836 w -(in) 5001 4836 w +(runac) 2720 5867 w +11 /LucidaSansUnicode00 f +(to) 3070 5867 w +(execute) 3217 5867 w 11 /LucidaSans-Italic f -(rfork) 5161 4836 w -11 /LucidaSansUnicode00 f -(\)) 5436 4836 w -(makes) 720 4966 w -(the) 1112 4966 w -(kernel) 1330 4966 w -(call) 1710 4966 w +(actouser) 3674 5867 w +11 /LucidaSansUnicode00 f +(on) 4173 5867 w +(the) 4347 5867 w +(AP) 4557 5867 w +(selected.) 4733 5867 w +(This) 5247 5867 w +(transfers) 720 5997 w +(control) 1231 5997 w +(to) 1643 5997 w +(user-mode,) 1787 5997 w +(restoring) 2453 5997 w +(the) 2973 5997 w +(state) 3181 5997 w +(as) 3479 5997 w +(saved) 3633 5997 w +(in) 3975 5997 w +(the) 4112 5997 w 11 /LucidaSans-Italic f -(runacore) 1938 4966 w -11 /LucidaSansUnicode00 f -(in) 2470 4966 w -(the) 2617 4966 w -(context) 2835 4966 w -(of) 3284 4966 w -(the) 3439 4966 w -(process.) 3657 4966 w -(This) 4150 4966 w -(function) 4422 4966 w -(makes) 4910 4966 w -(the) 5301 4966 w -(process) 720 5096 w -(become) 1172 5096 w -(a) 1631 5096 w -(handler) 1733 5096 w -(for) 2179 5096 w -(the) 2373 5096 w -(actual) 2585 5096 w -(process,) 2945 5096 w -(which) 3432 5096 w -(would) 3783 5096 w -(be) 4146 5096 w -(running) 4319 5096 w -(from) 4778 5096 w -(now) 5075 5096 w -(on) 5337 5096 w -(on) 720 5226 w -(the) 895 5226 w -(AC.) 1106 5226 w -(To) 1368 5226 w -(do) 1544 5226 w -(so,) 1720 5226 w +(Ureg) 4320 5997 w +11 /LucidaSansUnicode00 f +(kept) 4611 5997 w +(by) 4884 5997 w +(the) 5047 5997 w +(pro\255) 5255 5997 w +(cess) 720 6127 w +(in) 993 6127 w +(its) 1136 6127 w +(kernel) 1308 6127 w +(stack.) 1684 6127 w +(Both) 2040 6127 w 11 /LucidaSans-Italic f -(runacore) 1918 5226 w -11 /LucidaSansUnicode00 f -(calls) 2443 5226 w +(actouser) 2323 6127 w +11 /LucidaSansUnicode00 f +(and) 2826 6127 w +(any) 3067 6127 w +(kernel) 3296 6127 w +(handler) 3672 6127 w +(executing) 4120 6127 w +(in) 4686 6127 w +(the) 4828 6127 w +(AC) 5041 6127 w +(runs) 5235 6127 w +(using the) 720 6257 w 11 /LucidaSans-Italic f -(runac) 2720 5226 w -11 /LucidaSansUnicode00 f -(to) 3070 5226 w -(execute) 3217 5226 w -11 /LucidaSans-Italic f -(actouser) 3674 5226 w -11 /LucidaSansUnicode00 f -(on) 4173 5226 w -(the) 4347 5226 w -(AP) 4557 5226 w -(selected.) 4733 5226 w -(This) 5247 5226 w -(transfers) 720 5356 w -(control) 1231 5356 w -(to) 1643 5356 w -(user-mode,) 1787 5356 w -(restoring) 2453 5356 w -(the) 2973 5356 w -(state) 3181 5356 w -(as) 3479 5356 w -(saved) 3633 5356 w -(in) 3975 5356 w -(the) 4112 5356 w -11 /LucidaSans-Italic f -(Ureg) 4320 5356 w -11 /LucidaSansUnicode00 f -(kept) 4611 5356 w -(by) 4884 5356 w -(the) 5047 5356 w -(pro\255) 5255 5356 w -(cess) 720 5486 w -(in) 993 5486 w -(its) 1136 5486 w -(kernel) 1308 5486 w -(stack.) 1684 5486 w -(Both) 2040 5486 w -11 /LucidaSans-Italic f -(actouser) 2323 5486 w -11 /LucidaSansUnicode00 f -(and) 2826 5486 w -(any) 3067 5486 w -(kernel) 3296 5486 w -(handler) 3672 5486 w -(executing) 4120 5486 w -(in) 4686 5486 w -(the) 4828 5486 w -(AC) 5041 5486 w -(runs) 5235 5486 w -(using the) 720 5616 w -11 /LucidaSans-Italic f -(Mach) 1253 5616 w -11 /LucidaSansUnicode00 f -(stack.) 1569 5616 w -(The) 970 5782 w -(user) 1217 5782 w -(code) 1496 5782 w -(runs) 1798 5782 w -(undisturbed) 2083 5782 w -(in) 2778 5782 w -(the) 2926 5782 w -(AC) 3146 5782 w -(while) 3347 5782 w -(the) 3675 5782 w -(\(handler\)) 3895 5782 w -(process) 4421 5782 w -(is) 4881 5782 w -(blocked,) 5018 5782 w -(waiting) 720 5912 w -(for) 1143 5912 w -(the) 1332 5912 w -(ICC) 1539 5912 w -(to) 1759 5912 w -(complete.) 1903 5912 w -(That) 2465 5912 w -(happens) 2740 5912 w -(as) 3229 5912 w -(soon) 3382 5912 w -(as) 3676 5912 w -(there) 3829 5912 w -(is a) 4142 5912 w -(fault) 4361 5912 w -(or a) 4639 5912 w -(system call) 4882 5912 w -(in the) 720 6042 w -(AC.) 1061 6042 w -(When) 970 6208 w -(an) 1300 6208 w -(AP) 1466 6208 w -(takes) 1640 6208 w -(a) 1961 6208 w -(fault,) 2059 6208 w -(the) 2374 6208 w -(AP) 2582 6208 w -(transfers) 2756 6208 w -(control) 3268 6208 w -(of) 3681 6208 w -(the) 3827 6208 w -(process) 4036 6208 w -(back) 4485 6208 w -(to) 4773 6208 w -(the) 4919 6208 w -(TC,) 5128 6208 w -(by) 5346 6208 w -(finishing) 720 6338 w -(the) 1231 6338 w -(ICC,) 1448 6338 w -(and) 1713 6338 w -(then) 1957 6338 w -(waits) 2242 6338 w -(for) 2563 6338 w -(directions.) 2761 6338 w -(That) 3369 6338 w -(is,) 3653 6338 w -(the) 3821 6338 w -(AP) 4037 6338 w -(spins) 4219 6338 w -(on) 4545 6338 w -(the) 4725 6338 w -(ICC) 4941 6338 w -(struc\255) 5170 6338 w -(ture) 720 6468 w -(waiting for a) 971 6468 w -(new) 1677 6468 w -(call.) 1927 6468 w +(Mach) 1253 6257 w +11 /LucidaSansUnicode00 f +(stack.) 1569 6257 w +(The) 970 6423 w +(user) 1217 6423 w +(code) 1496 6423 w +(runs) 1798 6423 w +(undisturbed) 2083 6423 w +(in) 2778 6423 w +(the) 2926 6423 w +(AC) 3146 6423 w +(while) 3347 6423 w +(the) 3675 6423 w +(\(handler\)) 3895 6423 w +(process) 4421 6423 w +(is) 4881 6423 w +(blocked,) 5018 6423 w +(waiting) 720 6553 w +(for) 1143 6553 w +(the) 1332 6553 w +(ICC) 1539 6553 w +(to) 1759 6553 w +(complete.) 1903 6553 w +(That) 2465 6553 w +(happens) 2740 6553 w +(as) 3229 6553 w +(soon) 3382 6553 w +(as) 3676 6553 w +(there) 3829 6553 w +(is a) 4142 6553 w +(fault) 4361 6553 w +(or a) 4639 6553 w +(system call) 4882 6553 w +(in the) 720 6683 w +(AC.) 1061 6683 w +(When) 970 6849 w +(an) 1300 6849 w +(AP) 1466 6849 w +(takes) 1640 6849 w +(a) 1961 6849 w +(fault,) 2059 6849 w +(the) 2374 6849 w +(AP) 2582 6849 w +(transfers) 2756 6849 w +(control) 3268 6849 w +(of) 3681 6849 w +(the) 3827 6849 w +(process) 4036 6849 w +(back) 4485 6849 w +(to) 4773 6849 w +(the) 4919 6849 w +(TC,) 5128 6849 w +(by) 5346 6849 w +(finishing) 720 6979 w +(the) 1231 6979 w +(ICC,) 1448 6979 w +(and) 1713 6979 w +(then) 1957 6979 w +(waits) 2242 6979 w +(for) 2563 6979 w +(directions.) 2761 6979 w +(That) 3369 6979 w +(is,) 3653 6979 w +(the) 3821 6979 w +(AP) 4037 6979 w +(spins) 4219 6979 w +(on) 4545 6979 w +(the) 4725 6979 w +(ICC) 4941 6979 w +(struc\255) 5170 6979 w +(ture) 720 7109 w +(waiting for a) 971 7109 w +(new) 1677 7109 w +(call.) 1927 7109 w cleartomark showpage saveobj restore diff -r ddaa629716d5 -r 85df9273b945 src/9kron/k8/pmcio.c --- a/src/9kron/k8/pmcio.c Tue Jun 07 09:08:27 2011 +0000 +++ b/src/9kron/k8/pmcio.c Tue Jun 07 11:18:59 2011 +0000 @@ -128,27 +128,24 @@ v = rdmsr(regno + PerfEvtbase); v &= PeEvMskH|PeEvMskL|PeCtEna|PeOS|PeUsr|PeUnMsk; - if (p->enab != PmcCtlNullval){ + if (p->enab != PmcCtlNullval) if (p->enab) v |= PeCtEna; else v &= ~PeCtEna; - p->enab = PmcCtlNullval; - } - if (p->user != PmcCtlNullval){ + + if (p->user != PmcCtlNullval) if (p->user) v |= PeUsr; else v &= ~PeUsr; - p->user = PmcCtlNullval; - } - if (p->os != PmcCtlNullval){ + + if (p->os != PmcCtlNullval) if (p->os) v |= PeOS; else v &= ~PeOS; - p->os = PmcCtlNullval; - } + if (pmctrans(p) < 0) return -1; @@ -161,12 +158,11 @@ v &= ~(PeEvMskL|PeEvMskH|PeUnMsk); v |= SetEvMsk(v, e); v |= SetUMsk(v, u); - p->nodesc = 1; } if (p->reset != PmcCtlNullval && p->reset) { v = 0; wrmsr(regno+ PerfCtrbase, 0); - p->reset = PmcCtlNullval; + p->reset = PmcCtlNullval; /* only reset once */ } wrmsr(regno+ PerfEvtbase, v); pmcuserenab(pmcanyenab()); diff -r ddaa629716d5 -r 85df9273b945 src/9kron2/include/libc.h --- a/src/9kron2/include/libc.h Tue Jun 07 09:08:27 2011 +0000 +++ b/src/9kron2/include/libc.h Tue Jun 07 11:18:59 2011 +0000 @@ -743,7 +743,7 @@ PmcEnable = 4, }; -extern int confpmc(int, int, char *); +extern int confpmc(int, int, int, char *); extern uvlong rdpmc(int); #pragma varargck argpos werrstr 1 diff -r ddaa629716d5 -r 85df9273b945 src/9kron2/k8/pmcio.c --- a/src/9kron2/k8/pmcio.c Tue Jun 07 09:08:27 2011 +0000 +++ b/src/9kron2/k8/pmcio.c Tue Jun 07 11:18:59 2011 +0000 @@ -128,27 +128,24 @@ v = rdmsr(regno + PerfEvtbase); v &= PeEvMskH|PeEvMskL|PeCtEna|PeOS|PeUsr|PeUnMsk; - if (p->enab != PmcCtlNullval){ + if (p->enab != PmcCtlNullval) if (p->enab) v |= PeCtEna; else v &= ~PeCtEna; - p->enab = PmcCtlNullval; - } - if (p->user != PmcCtlNullval){ + + if (p->user != PmcCtlNullval) if (p->user) v |= PeUsr; else v &= ~PeUsr; - p->user = PmcCtlNullval; - } - if (p->os != PmcCtlNullval){ + + if (p->os != PmcCtlNullval) if (p->os) v |= PeOS; else v &= ~PeOS; - p->os = PmcCtlNullval; - } + if (pmctrans(p) < 0) return -1; @@ -161,12 +158,11 @@ v &= ~(PeEvMskL|PeEvMskH|PeUnMsk); v |= SetEvMsk(v, e); v |= SetUMsk(v, u); - p->nodesc = 1; } if (p->reset != PmcCtlNullval && p->reset) { v = 0; wrmsr(regno+ PerfCtrbase, 0); - p->reset = PmcCtlNullval; + p->reset = PmcCtlNullval; /* only reset once */ } wrmsr(regno+ PerfEvtbase, v); pmcuserenab(pmcanyenab()); diff -r ddaa629716d5 -r 85df9273b945 src/9kron2/libc/port/confpmc.c --- a/src/9kron2/libc/port/confpmc.c Tue Jun 07 09:08:27 2011 +0000 +++ b/src/9kron2/libc/port/confpmc.c Tue Jun 07 11:18:59 2011 +0000 @@ -2,12 +2,14 @@ #include int -confpmc(int index, int mode, char *desc) +confpmc(int core, int index, int mode, char *desc) { int fd; char name[32]; - snprint(name, sizeof(name), "/dev/ctr%2.2udctl", index); + if(core < 0) + core = getcore(nil); + snprint(name, sizeof(name), "/dev/core%4.4d/ctr%2.2dctl", core, index); fd = open(name, OWRITE); if (fd < 0) diff -r ddaa629716d5 -r 85df9273b945 src/9kron2/libc/port/rdpmc.c --- a/src/9kron2/libc/port/rdpmc.c Tue Jun 07 09:08:27 2011 +0000 +++ b/src/9kron2/libc/port/rdpmc.c Tue Jun 07 11:18:59 2011 +0000 @@ -2,13 +2,16 @@ #include + uvlong rdpmc(int index) { - int fd, n; + int fd, n, core; char name[16+2+1]; /* 0x0000000000000000\0 */ - - snprint(name, sizeof(name), "/dev/ctr%2.2ud", index); + + core = getcore(nil); + + snprint(name, sizeof(name), "/dev/core%4.4d/ctr%2.2ud", core, index); fd = open(name, OREAD); if (fd < 0) diff -r ddaa629716d5 -r 85df9273b945 src/9kron2/man/2/pmc --- a/src/9kron2/man/2/pmc Tue Jun 07 09:08:27 2011 +0000 +++ b/src/9kron2/man/2/pmc Tue Jun 07 11:18:59 2011 +0000 @@ -7,7 +7,7 @@ .B #include .PP .B -int confpmc(int index, int mode, char *desc) +int confpmc(int core, int index, int mode, char *desc) .PP .B uvlong rdpmc(int index) @@ -15,6 +15,8 @@ .I Confpmc configures the counter .I index +on core +.I core setting the configuration according to the configuration string, .I desc whic is architecture dependant and the diff -r ddaa629716d5 -r 85df9273b945 src/9kron2/man/3/pmc --- a/src/9kron2/man/3/pmc Tue Jun 07 09:08:27 2011 +0000 +++ b/src/9kron2/man/3/pmc Tue Jun 07 11:18:59 2011 +0000 @@ -5,20 +5,29 @@ .nf .B bind '#ε' /dev -.BI #ε/ctrdesc -.BI #ε/ctr00 -.BI #ε/ctr00ctl -.BI #ε/ctr01 -.BI #ε/ctr01ctl +.BI #ε/core0000/ctrdesc +.BI #ε/core0000/ctr00 +.BI #ε/core0000/ctr00ctl +.BI #ε/core0000/ctr01 +.BI #ε/core0000/ctr01ctl + ... +.BI #ε/core0001/ctr00 +.BI #ε/core0001/ctr00ctl +.BI #ε/core0001/ctr01 +.BI #ε/core0001/ctr01ctl ... .fi .SH DESCRIPTION .PP The .I pmc -device serves a one-level directory, giving -access to the hardware counters on the processor -the process reading or writing them is reading from. +device serves a two-level directory, giving +access to the hardware counters on the +different cores. +There is a directory per core, +.B coreNNNN, +containing files +pertaining to that core. .PP The .B ctrNN @@ -36,7 +45,7 @@ .B os The counter only runs when the processor is in the kernel. .TP -.BI set configuration +.BI "set configuration Sets the counter configuration. The detail of what the configuration means is left to the specific implementation of the counter. Reading the .B ctrdesc @@ -48,6 +57,11 @@ any other way to access the counter from user space, like special instructions. .PP +Any change to or from the counters or the configurations is seen +as soon as possible. In the worst case, it is guaranteed that the values +read or set are at least as fresh as the last time a process went in or out +of the kernel on that core. +.PP Configure the counter 0 to count L2 misses in the kernel. .EX % bind '#ε' /dev @@ -66,11 +80,11 @@ L2 ITLB miss DRAM access L3 miss - % echo reset > /dev/ctr00ctl - % echo kernel > /dev/ctr00ctl - % echo set L2 miss > /dev/ctr00ctl - % echo enable > /dev/ctr00ctl - % cat /dev/ctr00 + % echo reset > /dev/core0000/ctr00ctl + % echo kernel > /dev/core0000/ctr00ctl + % echo set L2 miss > /dev/core0000/ctr00ctl + % echo enable > /dev/core0000/ctr00ctl + % cat /dev/core0000/ctr00 0x00000000000003e5 % .EE