# HG changeset patch # User Noah Evans # Date 1307595614 0 # Node ID 77435bee0cf69000db9db5a4e912b59e0cf0a53e # Parent 04d588e3b9d407bd8e3c56f7a8d490a1fa5bb956 daily push: Wed Jun 8 07:00:04 CET 2011 diff -r 04d588e3b9d4 -r 77435bee0cf6 doc/papers/nix/nix.ms --- a/doc/papers/nix/nix.ms Wed Jun 08 12:15:23 2011 +0000 +++ b/doc/papers/nix/nix.ms Thu Jun 09 05:00:14 2011 +0000 @@ -13,6 +13,9 @@ Francisco J. Ballesteros Gorka Guardiola Enrique Soriano +Jim McKie +Charles Forsyth +Noah Evans (want your name here? Just ask!) .AB This paper describes NIX, a prototype operating system for future @@ -414,10 +417,42 @@ .I tubes . 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). +The interface is similar to that for Channels in the Plan 9 thread library: +.P1 + Tube* newtube(ulong msz, ulong n); + void freetube(Tube *t); + int nbtrecv(Tube *t, void *p); + int nbtsend(Tube *t, void *p); + void trecv(Tube *t, void *p); + void tsend(Tube *t, void *p); + int talt(Talt a[], int na); +.P2 +.LP +.I Newtube +creates a tube for the given message size and number of messages in the +tube buffer. +.I Tsend +and +.I trecv +can be used to send and receive. There are non-blocking variants, which +fail instead of blocking if the operation cannot proceed. And there is a +.I talt +request to perform alternative sends and/or receives on multiple tubes. .PP The implementation is a simple producer-consumer, but, because of the semaphores used, it is able to run at user space without entering the kernel -when sends and receives may proceed. +when sends and receives may proceed: +.P1 +struct Tube +{ + int msz; /* message size */ + int tsz; /* tube size (# of messages) */ + int nmsg; /* semaphore: # of messages in tube */ + int nhole; /* semaphore: # of free slots in tube */ + int hd; + int tl; +}; +.P2 .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 @@ -671,23 +706,33 @@ .PP With this implementation, we made several performance measurements before proceeding further. In particular, we measured how long it takes for a program with -50 threads to execute 5000 system calls in each thread. For the experiment, -the system call used does not block and does nothing. +50 threads to execute 500 system calls in each thread. For the experiment, +the system call used does not block and does nothing. The table shows the result: +.TS +center, allbox; +cfB cfB cfB +cfB cfCW c. +Core System Call Queue Call +TC 0.02s 0.06s +AC 0.20s 0.04s +.TE .PP -It takes this program 0.17 seconds to complete when run on the TC using the -queue based mechanism. However, it takes only 0.06 seconds to complete +It takes this program 0.06 seconds (of elapsed, real time) +to complete when run on the TC using the +queue based mechanism. However, it takes only 0.02 seconds to complete when using the standard system call mechanism. Therefore, at least for this program, -the mechanism is more an overhead than a benefit. It is likely that the total number of +the mechanism is more an overhead than a benefit in the TC. It is likely that the total number of system calls per second that could be performed in the machine might increase due to the smaller number of domain crossings. However, for a single program, that does not seem to be the case. .PP As another experiment, running the same program on the AC takes -240.3 seconds when using the standard system call mechanism, and 0.17 seconds +0.20 seconds when using the standard system call mechanism, and 0.04 seconds when using queue-based system calls. The AC is not meant to perform system calls. A system call made while running on it implies a trip to the TC and another trip back -to the AC. As a result, issuing system calls from the AC is utterly expensive. -Looking at the second time, it is similar to one for running in the TC. Therefore, +to the AC. As a result, issuing system calls from the AC is expensive. +Looking at the time when using queue-based calls, it is similar to one for running in the TC +(but more expensive). Therefore, we may conclude that queue based system calls may make system calls affordable even for ACs. .PP @@ -695,6 +740,16 @@ that did not consume all its quantum at user level, and move to ACs only those processes that do so. As a result, we have decided not to include queue based system calls (although tubes can still be used for IPC). +.PP +During the experiment, we found an interesting bug in the implementation of NIX. +Usually, when a processor has no ready process, the scheduler calls +.I idlehands +to halt the processor. It will wake up on the next interrupt. However, it can now +be the case than an AC replies to a previous request made by the TC (e.g., to +run a user program). By that time, the TC might be idle and it would miss the +reply until the next external interrupt. The temporary fix was not to call +.I idlehands +on the coordinating TC (the BSP). .NH 1 Things not done yet .HP @@ -702,10 +757,8 @@ Including more statistics in the .CW /proc interface to reflect the state of the system, considering the different kind of cores in it; -adding an interface to let the user code (or the kernel) request that a process should -continue in the TC node (the transfer has been implemented and tested, but there is no -interface yet to trigger it); deciding which interface to adopt for the user to -call the new service, and to what extent the mechanism has to be its own policy; +deciding if the current interface for +the new service is the right one, and to what extent the mechanism has to be its own policy; implementing KCs (which should not require any code, because they must execute the standard kernel); testing and debugging note handling for AC processes; more testing and fine tuning. @@ -792,6 +845,26 @@ draw solid copy "results/strid3.2M.ac.grap" .G2 +.NH 3 +The importance of pre-faulting +.HP +As the results show,the time sharing core wins in this case. It turned out +there was a bug in the prepaging code. Once the bug was fixed, performance improved +as shown below. +.G1 +frame wid 5 top invis right invis +label bot "Strid3 on a tc" "Stride of 1 to 1024 by 1" "2 Mbyte pages" "pre-paging fixed" +label left "Slowdown over stride of 1" "Smaller is better" +draw solid +copy "results/strid3.tc.ppfix.out.grap" +.G2 +.G1 +frame wid 5 top invis right invis +label bot "Strid3 on an AC" "Stride of 1 to 1024 by 1" "2 Mbyte pages" "pre-paging fixed" +label left "Slowdown over stride of 1" "Smaller is better" +draw solid +copy "results/strid3.ac.ppfix.out.grap" +.G2 .NH 2 ftq .HP diff -r 04d588e3b9d4 -r 77435bee0cf6 doc/papers/nix/nix.pdf Binary file doc/papers/nix/nix.pdf has changed diff -r 04d588e3b9d4 -r 77435bee0cf6 doc/papers/nix/nix.ps --- a/doc/papers/nix/nix.ps Wed Jun 08 12:15:23 2011 +0000 +++ b/doc/papers/nix/nix.ps Thu Jun 09 05:00:14 2011 +0000 @@ -632,343 +632,288 @@ (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 +(\(want) 2212 2550 w +(your) 2546 2550 w +(name here?) 2826 2550 w +(Just) 3479 2550 w +(ask!\)) 3723 2550 w +(ABSTRACT) 2817 3025 w +11 /LucidaSansUnicode00 f +(This) 1366 3305 w +(paper) 1647 3305 w +(describes) 2009 3305 w +(NIX,) 2573 3305 w +(a) 2847 3305 w +(prototype) 2965 3305 w +(operating) 3540 3305 w +(system) 4110 3305 w +(for) 4541 3305 w +(future) 4751 3305 w +(manycore) 1116 3435 w +(CPUs.) 1679 3435 w +(NIX) 2062 3435 w +(features) 2288 3435 w +(a) 2768 3435 w +(heterogeneous) 2873 3435 w +(CPU) 3713 3435 w +(model) 3970 3435 w +(and) 4346 3435 w +(a) 4588 3435 w +(change) 4693 3435 w +(from) 1116 3565 w +(the) 1443 3565 w +(traditional) 1687 3565 w +(Unix) 2309 3565 w +(memory) 2625 3565 w +(model) 3133 3565 w +(of) 3538 3565 w +(separate) 3719 3565 w +(virtual) 4249 3565 w +(address) 4658 3565 w +(spaces.) 1116 3695 w +(NIX) 1592 3695 w +(has) 1820 3695 w +(been) 2050 3695 w +(influenced) 2356 3695 w +(by) 2959 3695 w +(our) 3130 3695 w +(work) 3355 3695 w +(in) 3661 3695 w +(High) 3806 3695 w +(Performance) 4100 3695 w +(com\255) 4815 3695 w +(puting, both on Blue) 1116 3825 w +(Gene) 2243 3825 w +(and more) 2549 3825 w +(traditional) 3093 3825 w +(clusters.) 3677 3825 w +(NIX) 1366 3991 w +(partitions) 1586 3991 w +(cores) 2136 3991 w +(by) 2460 3991 w +(function:) 2624 3991 w +(Timesharing) 3138 3991 w +(Cores,) 3839 3991 w +(or) 4219 3991 w +(TCs;) 4370 3991 w +(Applica\255) 4645 3991 w +(tion) 1116 4121 w +(Cores,) 1360 4121 w +(or) 1737 4121 w +(ACs; and Kernel) 1885 4121 w +(Cores, or KCs.) 2772 4121 w +(There) 3604 4121 w +(is always at) 3945 4121 w +(least) 4592 4121 w +(one) 4879 4121 w +(TC,) 1116 4251 w +(and) 1350 4251 w +(it) 1602 4251 w +(runs) 1729 4251 w +(applications) 2020 4251 w +(in) 2718 4251 w +(the) 2872 4251 w +(traditional) 3097 4251 w +(model.) 3700 4251 w +(KCs) 4157 4251 w +(are) 4416 4251 w +(optional) 4639 4251 w +(cores) 1116 4381 w +(created) 1444 4381 w +(to) 1882 4381 w +(run) 2032 4381 w +(kernel) 2255 4381 w +(functions) 2630 4381 w +(on) 3169 4381 w +(demand.) 3346 4381 w +(ACs) 3889 4381 w +(are) 4138 4381 w +(also) 4347 4381 w +(optional,) 4604 4381 w +(and) 1116 4511 w +(are) 1351 4511 w +(entirely) 1556 4511 w +(turned) 1992 4511 w +(over) 2382 4511 w +(to) 2650 4511 w +(running) 2795 4511 w +(an) 3249 4511 w +(application,) 3416 4511 w +(with) 4077 4511 w +(no) 4341 4511 w +(interrupts;) 4514 4511 w +(not) 1116 4641 w +(even) 1349 4641 w +(clock) 1654 4641 w +(interrupts.) 1985 4641 w +(Unlike) 2638 4641 w +(traditional) 3028 4641 w +(HPC) 3633 4641 w +(Light) 3907 4641 w +(Weight) 4230 4641 w +(kernels,) 4652 4641 w +(functions) 1116 4771 w +(are) 1654 4771 w +(not) 1863 4771 w +(static:) 2080 4771 w +(the) 2443 4771 w +(number) 2655 4771 w +(of) 3110 4771 w +(TCs,) 3259 4771 w +(KCs,) 3536 4771 w +(and) 3817 4771 w +(ACs) 4057 4771 w +(can) 4307 4771 w +(change) 4534 4771 w +(as) 4959 4771 w +(needs) 1116 4901 w +(change.) 1495 4901 w +(Unlike) 2010 4901 w +(a) 2406 4901 w +(traditional) 2529 4901 w +(operating) 3140 4901 w +(system,) 3715 4901 w +(applications) 4186 4901 w +(can) 4891 4901 w +(access) 1116 5031 w +(services) 1506 5031 w +(by) 1976 5031 w +(sending) 2146 5031 w +(a) 2613 5031 w +(message) 2718 5031 w +(to) 3229 5031 w +(the) 3381 5031 w +(TC) 3596 5031 w +(kernel,) 3785 5031 w +(rather) 4197 5031 w +(than) 4563 5031 w +(by) 4845 5031 w +(a) 5015 5031 w +(system call) 1116 5161 w +(trap.) 1741 5161 w +(Control) 1366 5327 w +(of) 1804 5327 w +(ACs) 1954 5327 w +(is) 2204 5327 w +(managed) 2334 5327 w +(by) 2867 5327 w +(means) 3036 5327 w +(of) 3428 5327 w +(active) 3579 5327 w +(messages.) 3931 5327 w +(NIX) 4567 5327 w +(takes) 4792 5327 w +(advantage) 1116 5457 w +(of) 1713 5457 w +(the) 1870 5457 w +(shared-memory) 2090 5457 w +(nature) 2999 5457 w +(of) 3393 5457 w +(manycore) 3550 5457 w +(CPUs,) 4117 5457 w +(and) 4470 5457 w +(passes) 4716 5457 w +(pointers to both data) 1116 5587 w +(and code) 2281 5587 w +(to coordinate) 2803 5587 w +(among cores.) 3549 5587 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,) 1390 6569 w -(where) 1957 6569 w -(applications) 2315 6569 w -(are) 2995 6569 w -(assigned) 3199 6569 w -(to) 3708 6569 w -(cores) 3853 6569 w -(with) 4176 6569 w -(no) 4439 6569 w -(OS) 4611 6569 w -(interference;) 4793 6569 w -(that) 720 6699 w -(is, without) 966 6699 w -(an operating system kernel.) 1561 6699 w -(Following this idea, we) 3120 6699 w -(have) 4373 6699 w -(built) 4656 6699 w -(NIX.) 4933 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 5977 w +(Introduction) 888 5977 w +11 /LucidaSansUnicode00 f +(In) 720 6143 w +(many) 860 6143 w +(cases,) 1188 6143 w +(it) 1554 6143 w +(has) 1667 6143 w +(been) 1892 6143 w +(argued) 2193 6143 w +(that) 2606 6143 w +(the) 2857 6143 w +(operating) 3068 6143 w +(system) 3621 6143 w +(stands) 4035 6143 w +(in) 4427 6143 w +(the) 4568 6143 w +(way) 4780 6143 w +(of) 5024 6143 w +(appli\255) 5173 6143 w +(cations) 720 6273 w +(and) 1137 6273 w +(that) 1371 6273 w +(they cannot) 1617 6273 w +(increase) 2276 6273 w +(their performance) 2753 6273 w +(due) 3749 6273 w +(to system activities and due) 3983 6273 w +(to) 720 6403 w +(its) 869 6403 w +(implementation.) 1039 6403 w +(In) 1954 6403 w +(particular,) 2095 6403 w +(data) 2681 6403 w +(base) 2954 6403 w +(systems,) 3244 6403 w +(fine-tuned) 3751 6403 w +(servers,) 4368 6403 w +(applications) 4828 6403 w +(built) 720 6533 w +(using the) 997 6533 w +(exokernel) 1530 6533 w +(approach, with libOSes, all) 2094 6533 w +(share) 3547 6533 w +(this view.) 3874 6533 w +(However,) 970 6699 w +(in) 1521 6699 w +(the) 1678 6699 w +(era) 1906 6699 w +(of) 2131 6699 w +(multi-core) 2296 6699 w +(and) 2923 6699 w +(many-core) 3179 6699 w +(machines,) 3819 6699 w +(we) 4417 6699 w +(believe) 4622 6699 w +(that) 5056 6699 w +(we) 5325 6699 w +(could) 720 6829 w +(get) 1066 6829 w +(rid) 1291 6829 w +(of) 1491 6829 w +(the) 1652 6829 w +(entire) 1876 6829 w +(operating) 2239 6829 w +(system) 2805 6829 w +(kernel.) 3232 6829 w +(We) 3653 6829 w +(advocate) 3863 6829 w +(for) 4390 6829 w +(a) 4596 6829 w +(null-kernel) 4710 6829 w +(or) 5360 6829 w +(zero-kernel) 720 6959 w +(approach,) 1390 6959 w +(where) 1957 6959 w +(applications) 2315 6959 w +(are) 2995 6959 w +(assigned) 3199 6959 w +(to) 3708 6959 w +(cores) 3853 6959 w +(with) 4176 6959 w +(no) 4439 6959 w +(OS) 4611 6959 w +(interference;) 4793 6959 w +(that) 720 7089 w +(is, without) 966 7089 w +(an operating system kernel.) 1561 7089 w +(Following this idea, we) 3120 7089 w +(have) 4373 7089 w +(built) 4656 7089 w +(NIX.) 4933 7089 w cleartomark showpage saveobj restore @@ -978,564 +923,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. An active) 720 2092 w -(message) 1616 2092 w -(sends not) 2118 2092 w -(just) 2675 2092 w -(references to data, but) 2908 2092 w -(also to code.) 4160 2092 w -(The) 4913 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) 1214 4280 w -(is) 1484 4280 w -(to) 1618 4280 w -(keep) 1772 4280 w -(a) 2075 4280 w -(standard) 2182 4280 w -(time-sharing) 2698 4280 w -(kernel) 3443 4280 w -(as) 3822 4280 w -(it) 3985 4280 w -(is) 4104 4280 w -(now,) 4238 4280 w -(but) 4539 4280 w -(to) 4763 4280 w -(be) 4917 4280 w -(able) 5094 4280 w -(to) 5364 4280 w -(exploit) 720 4410 w -(other) 1133 4410 w -(cores) 1459 4410 w -(for) 1788 4410 w -(either) 1983 4410 w -(user) 2335 4410 w -(or) 2608 4410 w -(kernel) 2762 4410 w -(intensive) 3137 4410 w -(processes.) 3657 4410 w -(In) 4298 4410 w -(the) 4440 4410 w -(worst) 4653 4410 w -(case,) 4989 4410 w -(the) 5301 4410 w -(time-sharing) 720 4540 w -(kernel) 1463 4540 w -(will) 1840 4540 w -(be) 2065 4540 w -(able) 2240 4540 w -(to) 2508 4540 w -(work) 2660 4540 w -(as) 2965 4540 w -(it) 3127 4540 w -(does) 3245 4540 w -(now.) 3544 4540 w -(In) 3879 4540 w -(the) 4024 4540 w -(best) 4240 4540 w -(case,) 4513 4540 w -(applications) 4828 4540 w -(will) 720 4670 w -(be) 936 4670 w -(able) 1102 4670 w -(to run as fast) 1361 4670 w -(as permitted by the) 2106 4670 w -(raw) 3183 4670 w -(hardware.) 3409 4670 w -(NIX) 970 4836 w -(derives) 1209 4836 w -(from) 1649 4836 w -(Plan) 1961 4836 w -(9) 2240 4836 w -(from) 2366 4836 w -(Bell) 2678 4836 w -(Labs.) 2925 4836 w -(Source) 3296 4836 w -(code,) 3710 4836 w -(compiled) 4056 4836 w -(for) 4603 4836 w -(Plan) 4814 4836 w -(9,) 5094 4836 w -(also) 5256 4836 w -(works) 720 4966 w -(on) 1074 4966 w -(NIX.) 1246 4966 w -(We) 1535 4966 w -(make) 1729 4966 w -(an) 2055 4966 w -(even) 2221 4966 w -(stronger) 2507 4966 w -(guarantee:) 2996 4966 w -(if) 3604 4966 w -(a) 3714 4966 w -(binary) 3812 4966 w -(worked) 4181 4966 w -(on) 4610 4966 w -(Plan) 4782 4966 w -(9,) 5041 4966 w -(it) 5182 4966 w -(will) 5291 4966 w -(work) 720 5096 w -(on NIX.) 1016 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,) 1248 6634 w -(AC,) 1740 6634 w -(is) 2006 6634 w -(an) 2173 6634 w -(application) 2382 6634 w -(core:) 3050 6634 w -(only) 3395 6634 w -(APs) 3699 6634 w -(can) 3972 6634 w -(be) 4237 6634 w -(Application) 4448 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 @@ -1545,1209 +1516,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 feature.) 2220 1370 w -(3) 720 1536 w -(The) 970 1536 w -(third, KC, is a) 1204 1536 w -(kernel) 1966 1536 w -(core.) 2334 1536 w -(Kernel) 2669 1536 w -(cores can be) 3045 1536 w -(created under control) 3752 1536 w -(of) 4941 1536 w -(the) 5085 1536 w -(TC.) 5292 1536 w -(KCs) 970 1666 w -(do) 1210 1666 w -(nothing) 1382 1666 w -(but) 1830 1666 w -(run) 2044 1666 w -(OS) 2261 1666 w -(tasks) 2442 1666 w -(for the) 2756 1666 w -(TC. A) 3150 1666 w -(KC) 3476 1666 w -(might, for example, run a) 3659 1666 w -(file) 5065 1666 w -(sys\255) 5267 1666 w -(tem) 970 1796 w -(call.) 1229 1796 w -(KCs) 1534 1796 w -(never) 1792 1796 w -(run) 2140 1796 w -(user) 2375 1796 w -(mode) 2660 1796 w -(code.) 3014 1796 w -(Typical) 3392 1796 w -(usages) 3823 1796 w -(for) 4249 1796 w -(KCs) 4457 1796 w -(are) 4716 1796 w -(to) 4939 1796 w -(service) 5102 1796 w -(interrupts) 970 1926 w -(from) 1540 1926 w -(device) 1838 1926 w -(drivers) 2219 1926 w -(and) 2628 1926 w -(to) 2869 1926 w -(perform) 3020 1926 w -(system) 3494 1926 w -(calls) 3911 1926 w -(requested) 4191 1926 w -(to,) 4768 1926 w -(otherwise) 4954 1926 w -(overloaded, 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,) 720 6044 w -(there) 1323 6044 w -(are) 1648 6044 w -(two) 1863 6044 w -(different) 2104 6044 w -(types) 2613 6044 w -(of) 2946 6044 w -(kernel) 3102 6044 w -(in) 3483 6044 w -(the) 3631 6044 w -(system:) 3850 6044 w -(TCs) 4307 6044 w -(and) 4556 6044 w -(KCs) 4802 6044 w -(execute) 5054 6044 w -(the) 720 6174 w -(standard) 941 6174 w -(time-sharing) 1461 6174 w -(kernel.) 2210 6174 w -(ACs) 2628 6174 w -(execute) 2886 6174 w -(almost) 3354 6174 w -(without) 3763 6174 w -(a) 4215 6174 w -(kernel,) 4326 6174 w -(but) 4744 6174 w -(for) 4972 6174 w -(a) 5174 6174 w -(few) 5284 6174 w -(exception) 720 6304 w -(handlers) 1306 6304 w -(and) 1829 6304 w -(their) 2089 6304 w -(main) 2399 6304 w -(scheduling) 2725 6304 w -(loop,) 3367 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) 3700 6304 w -11 /LucidaSansUnicode00 f -(.) 4124 6304 w -(This) 4257 6304 w -(has) 4545 6304 w -(a) 4793 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 @@ -2757,541 +2741,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) 1061 1110 w -(TC) 1271 1110 w -(might) 1455 1110 w -(instruct) 1805 1110 w -(the) 2251 1110 w -(core) 2461 1110 w -(to) 2730 1110 w -(exit) 2877 1110 w -(the) 3118 1110 w -(AC) 3328 1110 w -(loop) 3519 1110 w -(and) 3793 1110 w -(re-enter) 4031 1110 w -(the) 4520 1110 w -(group) 4731 1110 w -(of) 5088 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 @@ -3300,418 +3249,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) 720 3882 w -(compatibility) 1088 3882 w -(for) 1820 3882 w -(processes) 2014 3882 w -(is) 2584 3882 w -(hence) 2713 3882 w -(rather) 3070 3882 w -(easy:) 3433 3882 w -(old) 3745 3882 w -(processes) 3954 3882 w -(only) 4524 3882 w -(run) 4789 3882 w -(on) 5012 3882 w -(a) 5189 3882 w -(TC,) 5292 3882 w -(unless) 720 4012 w -(the) 1102 4012 w -(kernel) 1313 4012 w -(decides) 1686 4012 w -(otherwise.) 2132 4012 w -(If) 2760 4012 w -(a) 2873 4012 w -(user) 2974 4012 w -(makes) 3245 4012 w -(a) 3630 4012 w -(mistake) 3731 4012 w -(and) 4189 4012 w -(starts) 4426 4012 w -(an) 4765 4012 w -(old) 4933 4012 w -(binary) 5140 4012 w -(on) 720 4142 w -(an) 900 4142 w -(AC,) 1074 4142 w -(it) 1307 4142 w -(will) 1426 4142 w -(simply) 1653 4142 w -(move) 2047 4142 w -(back) 2381 4142 w -(to) 2677 4142 w -(a) 2831 4142 w -(TC) 2938 4142 w -(at) 3129 4142 w -(the) 3277 4142 w -(first) 3494 4142 w -(system) 3755 4142 w -(call) 4175 4142 w -(and) 4402 4142 w -(stay) 4646 4142 w -(there) 4907 4142 w -(until) 5231 4142 w -(directed) 720 4272 w -(to) 1202 4272 w -(move.) 1356 4272 w -(If) 1760 4272 w -(the) 1879 4272 w -(binary) 2096 4272 w -(is) 2473 4272 w -(mostly) 2606 4272 w -(spending) 3006 4272 w -(its) 3543 4272 w -(time) 3717 4272 w -(on) 3999 4272 w -(computation,) 4179 4272 w -(it) 4931 4272 w -(can) 5049 4272 w -(still) 5279 4272 w -(move) 720 4402 w -(back) 1056 4402 w -(out) 1354 4402 w -(to) 1578 4402 w -(an) 1734 4402 w -(AC) 1911 4402 w -(for) 2111 4402 w -(the) 2312 4402 w -(duration) 2531 4402 w -(of) 3030 4402 w -(the) 3186 4402 w -(time) 3405 4402 w -(spent) 3690 4402 w -(in) 4034 4402 w -(a) 4182 4402 w -(computational) 4291 4402 w -(kernel.) 5104 4402 w -(No checkpointing is needed: this movement) 720 4532 w -(works because) 3102 4532 w -(the) 3923 4532 w -(cores share) 4129 4532 w -(memory.) 4777 4532 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 4792 w -(Semaphores) 888 4792 w -(and) 1617 4792 w -(tubes) 1863 4792 w -11 /LucidaSansUnicode00 f -(Because) 720 4958 w -(in) 1194 4958 w -(NIX) 1339 4958 w -(applications) 1566 4958 w -(may) 2255 4958 w -(run) 2520 4958 w -(in) 2746 4958 w -(ACs) 2891 4958 w -(undisturbed) 3144 4958 w -(by) 3836 4958 w -(other) 4007 4958 w -(kernel) 4335 4958 w -(activities,) 4714 4958 w -(it) 5265 4958 w -(is) 5384 4958 w -(important) 720 5088 w -(to) 1282 5088 w -(be) 1426 5088 w -(able) 1593 5088 w -(to) 1853 5088 w -(perform) 1997 5088 w -(inter process communication wihout) 2464 5088 w -(the) 4444 5088 w -(help of) 4650 5088 w -(the) 5059 5088 w -(ker\255) 5265 5088 w -(nel) 720 5218 w -(if) 931 5218 w -(feasible.) 1053 5218 w -(Besides) 1552 5218 w -(the) 2002 5218 w -(standard) 2222 5218 w -(toolkit) 2741 5218 w -(of) 3134 5218 w -(IPC) 3291 5218 w -(mechanisms) 3509 5218 w -(in) 4221 5218 w -(Plan) 4371 5218 w -(9,) 4643 5218 w -(NIX) 4797 5218 w -(includes) 5029 5218 w -(two mechanisms for this purpose:) 720 5348 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 5514 w -11 /LucidaSansUnicode00 f -(Optimistic user-level) 970 5514 w -(semaphores, and) 2127 5514 w +(\031) 720 5904 w +11 /LucidaSansUnicode00 f +(Optimistic user-level) 970 5904 w +(semaphores, and) 2127 5904 w 11 /LucidaSansUnicode22 f -(\031) 720 5680 w -11 /LucidaSansUnicode00 f -(Tubes.) 970 5680 w -(NIX) 720 5846 w -(semaphores) 948 5846 w -(use) 1643 5846 w -(atomic) 1876 5846 w -(increment) 2282 5846 w -(and) 2865 5846 w -(decrement) 3110 5846 w -(operations,) 3724 5846 w -(as) 4374 5846 w -(found) 4538 5846 w -(on) 4898 5846 w -(AMD64) 5080 5846 w -(and) 720 5976 w -(other) 973 5976 w -(architectures,) 1311 5976 w -(to) 2094 5976 w -(update) 2257 5976 w -(a) 2682 5976 w -(semaphore) 2798 5976 w -(value) 3445 5976 w -(in) 3780 5976 w -(order) 3935 5976 w -(to) 4278 5976 w -(synchronize.) 4441 5976 w -(If) 5173 5976 w -(the) 5301 5976 w -(operation) 720 6106 w -(performed) 1299 6106 w -(in) 1928 6106 w -(the) 2095 6106 w -(semaphore) 2333 6106 w -(may) 2992 6106 w -(proceed) 3279 6106 w -(without) 3776 6106 w -(blocking) 4245 6106 w -(\(and) 4768 6106 w -(without) 5070 6106 w -(requiring) 720 6236 w -(to) 1252 6236 w -(awake) 1403 6236 w -(a) 1779 6236 w -(peer) 1883 6236 w -(process\),) 2164 6236 w -(it) 2689 6236 w -(is) 2805 6236 w -(performed) 2936 6236 w -(by) 3541 6236 w -(the) 3710 6236 w -(user) 3924 6236 w -(library) 4198 6236 w -(without) 4582 6236 w -(entering) 5026 6236 w -(the) 720 6366 w -(kernel.) 926 6366 w -(Otherwise, the) 1364 6366 w -(kernel) 2177 6366 w -(is called to either block) 2545 6366 w -(or awake) 3826 6366 w -(another process.) 4341 6366 w -(The) 970 6532 w -(interface) 1220 6532 w -(provided) 1739 6532 w -(for) 2260 6532 w -(semaphores) 2464 6532 w -(contains) 3163 6532 w -(the) 3664 6532 w -(two) 3887 6532 w -(standard) 4132 6532 w -(operations) 4654 6532 w -(and) 5274 6532 w -(another one,) 720 6662 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 6662 w -11 /LucidaSansUnicode00 f -(, which is not) 1843 6662 w -(usual.) 2591 6662 w -9 /LucidaTypewriter f -(void) 1200 6832 w -(upsem\(int) 1525 6832 w -(*sem\);) 2175 6832 w -(void) 1200 6942 w -(downsem\(int) 1525 6942 w -(*sem\);) 2305 6942 w -(int) 1200 7052 w -(altsems\(int) 1460 7052 w -(*sems[],) 2240 7052 w -(int) 2825 7052 w -(nsems\);) 3085 7052 w -11 /LucidaSans-Italic f -(Upsem) 720 7278 w -11 /LucidaSansUnicode00 f -(and) 1118 7278 w -11 /LucidaSans-Italic f -(downsem) 1357 7278 w -11 /LucidaSansUnicode00 f -(do) 1896 7278 w -(not) 2073 7278 w -(deserve) 2290 7278 w -(any) 2744 7278 w -(comment,) 2971 7278 w -(other) 3546 7278 w -(than) 3871 7278 w -(their) 4151 7278 w -(optimism) 4441 7278 w -(and) 4984 7278 w -(their) 5224 7278 w +(altsems) 1434 7052 w +11 /LucidaSansUnicode00 f +(, which is not) 1843 7052 w +(usual.) 2591 7052 w cleartomark showpage saveobj restore @@ -3720,494 +3694,503 @@ /saveobj save def mark 6 pagesetup -11 /LucidaSansUnicode00 f -(ability) 720 850 w -(to) 1094 850 w -(run) 1252 850 w -(at) 1483 850 w -(user-level) 1634 850 w -(when) 2223 850 w -(feasible.) 2555 850 w -(In) 3054 850 w -(the) 3203 850 w -(worst) 3423 850 w -(case,) 3766 850 w -(they) 4085 850 w -(call) 4362 850 w -(two) 4592 850 w -(new) 4834 850 w -(system) 5098 850 w -(calls) 720 980 w -(\() 1021 980 w +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 -(semsleep) 1057 980 w -11 /LucidaSansUnicode00 f -(,) 1540 980 w -(and) 1639 980 w +(Upsem) 720 1276 w +11 /LucidaSansUnicode00 f +(and) 1118 1276 w 11 /LucidaSans-Italic f -(semwakeup) 1901 980 w -11 /LucidaSansUnicode00 f -(\)) 2525 980 w -(to) 2625 980 w -(block) 2797 980 w -(or) 3149 980 w -(wake) 3325 980 w -(up) 3661 980 w -(another) 3862 980 w -(process,) 4338 980 w -(if) 4848 980 w -(required.) 4985 980 w -(Optionally,) 720 1110 w -(before) 1342 1110 w -(blocking,) 1730 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 -(downsem) 2262 1110 w -11 /LucidaSansUnicode00 f -(may) 2801 1110 w -(spin,) 3062 1110 w -(busy) 3363 1110 w -(waiting) 3654 1110 w -(for) 4082 1110 w -(a) 4276 1110 w -(chance) 4378 1110 w -(to) 4790 1110 w -(perform) 4939 1110 w -(a) 5411 1110 w -(down on the) 720 1240 w -(semaphore) 1420 1240 w -(without) 2047 1240 w -(blocking.) 2484 1240 w +(semsleep) 1057 1536 w +11 /LucidaSansUnicode00 f +(,) 1540 1536 w +(and) 1639 1536 w 11 /LucidaSans-Italic f -(Altsems) 970 1406 w -11 /LucidaSansUnicode00 f -(is) 1427 1406 w -(a) 1554 1406 w -(novel) 1654 1406 w -(operation,) 1979 1406 w -(which) 2566 1406 w -(tries) 2915 1406 w -(to) 3191 1406 w -(perform) 3339 1406 w -(a) 3810 1406 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) 3911 1406 w -11 /LucidaSansUnicode00 f -(in) 4449 1406 w -(one) 4589 1406 w -(of) 4826 1406 w -(the) 4974 1406 w -(given) 5185 1406 w -(semaphores.) 720 1536 w -(It) 1444 1536 w -(is) 1557 1536 w -(not) 1685 1536 w -(known) 1901 1536 w -(in) 2293 1536 w -(advance) 2433 1536 w -(in) 2907 1536 w -(which) 3047 1536 w -(semaphore) 3396 1536 w -(will) 4028 1536 w -(be) 4249 1536 w -(the) 4420 1536 w -(down) 4631 1536 w -(operation) 4960 1536 w -(performed.) 720 1666 w -(If) 1355 1666 w -(several) 1466 1666 w -(semaphores) 1879 1666 w -(are) 2565 1666 w -(ready) 2771 1666 w -(for) 3103 1666 w -(a) 3294 1666 w -(down) 3393 1666 w -(without) 3720 1666 w -(blocking,) 4160 1666 w -(one) 4689 1666 w -(of) 4925 1666 w -(them) 5072 1666 w -(is) 5384 1666 w -(selected) 720 1796 w -(and) 1222 1796 w -(the) 1482 1796 w -(down) 1715 1796 w -(is) 2066 1796 w -(performed;) 2216 1796 w -(the) 2875 1796 w -(function) 3107 1796 w -(returns) 3609 1796 w -(an) 4055 1796 w -(index) 4245 1796 w -(value) 4604 1796 w -(indicating) 4945 1796 w -(which one. If) 720 1926 w -(none) 1439 1926 w -(of) 1739 1926 w -(the) 1882 1926 w -(downs may proceed, the) 2088 1926 w -(operation calls the) 3429 1926 w -(kernel) 4454 1926 w -(and blocks.) 4822 1926 w -(Therefore,) 970 2092 w -(in) 1567 2092 w -(the) 1709 2092 w -(best) 1922 2092 w -(case,) 2192 2092 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) 2504 2092 w -11 /LucidaSansUnicode00 f -(performs) 2955 2092 w -(a) 3484 2092 w -(down) 3587 2092 w -(in) 3918 2092 w -(user) 4060 2092 w -(space,) 4333 2092 w -(without) 4714 2092 w -(enter\255) 5158 2092 w -(ing) 720 2222 w -(the) 930 2222 w -(kernel,) 1143 2222 w -(in) 1553 2222 w -(a) 1695 2222 w -(non-determinist) 1798 2222 w -(way.) 2717 2222 w -(In) 3032 2222 w -(the) 3174 2222 w -(worst) 3386 2222 w -(case,) 3721 2222 w -(the) 4032 2222 w -(kernel) 4244 2222 w -(is) 4618 2222 w -(used) 4747 2222 w -(to) 5043 2222 w -(await) 5192 2222 w -(for) 720 2352 w -(a) 924 2352 w -(chance) 1036 2352 w -(to) 1458 2352 w -(down) 1617 2352 w -(one) 1957 2352 w -(of) 2205 2352 w -(the) 2365 2352 w -(semaphores.) 2588 2352 w -(Before) 3323 2352 w -(doing) 3716 2352 w -(so,) 4072 2352 w -(the) 4282 2352 w -(operation) 4505 2352 w -(may) 5069 2352 w -(be) 5341 2352 w -(configured to spin and busy wait) 720 2482 w -(for a) 2506 2482 w -(while.) 2790 2482 w -(Optimistic) 970 2648 w -(semaphores,) 1555 2648 w -(as) 2276 2648 w -(described,) 2431 2648 w -(are) 3024 2648 w -(used) 3230 2648 w -(in) 3523 2648 w -(NIX) 3661 2648 w -(to) 3881 2648 w -(implement) 4028 2648 w -(shared) 4637 2648 w -(memory) 5037 2648 w -(communication) 720 2778 w -(channels) 1609 2778 w -(called) 2149 2778 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 -(tubes) 2530 2778 w -11 /LucidaSansUnicode00 f -(.) 2819 2778 w -(A) 2958 2778 w -(tube) 3103 2778 w -(is) 3411 2778 w -(a) 3567 2778 w -(buffered) 3696 2778 w -(unidirectional) 4221 2778 w -(channel.) 5022 2778 w -(Fixed-size) 720 2908 w -(messages) 1324 2908 w -(can) 1885 2908 w -(be) 2108 2908 w -(sent) 2277 2908 w -(and) 2542 2908 w -(received) 2778 2908 w -(from) 3261 2908 w -(it) 3554 2908 w -(\(but) 3665 2908 w -(different) 3917 2908 w -(tubes) 4416 2908 w -(may) 4750 2908 w -(have) 5008 2908 w -(dif\255) 5294 2908 w -(ferent) 720 3038 w -(message) 1074 3038 w -(sizes\).) 1576 3038 w -(The) 970 3204 w -(implementation) 1230 3204 w -(is) 2130 3204 w -(a) 2279 3204 w -(simple) 2401 3204 w -(producer-consumer,) 2815 3204 w -(but,) 3981 3204 w -(because) 4256 3204 w -(of) 4752 3204 w -(the) 4922 3204 w -(sema\255) 5155 3204 w -(phores) 720 3334 w -(used,) 1127 3334 w -(it) 1457 3334 w -(is) 1570 3334 w -(able) 1698 3334 w -(to) 1962 3334 w -(run) 2110 3334 w -(at) 2331 3334 w -(user) 2473 3334 w -(space) 2744 3334 w -(without) 3088 3334 w -(entering) 3530 3334 w -(the) 4016 3334 w -(kernel) 4227 3334 w -(when) 4600 3334 w -(sends) 4923 3334 w -(and) 5274 3334 w -(receives may proceed.) 720 3464 w -(It) 970 3630 w -(is) 1079 3630 w -(feasible) 1203 3630 w -(to) 1654 3630 w -(try) 1798 3630 w -(to) 1977 3630 w -(perform) 2121 3630 w -(multiple) 2588 3630 w -(sends) 3062 3630 w -(and) 3409 3630 w -(receives) 3643 3630 w -(at) 4111 3630 w -(the) 4250 3630 w -(same) 4458 3630 w -(time,) 4776 3630 w -(waiting) 5085 3630 w -(for) 720 3760 w -(the) 926 3760 w -(chance) 1149 3760 w -(to) 1572 3760 w -(execute) 1732 3760 w -(one) 2202 3760 w -(of) 2451 3760 w -(them.) 2611 3760 w -(This) 2971 3760 w -(operation) 3248 3760 w -(exploits) 3812 3760 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 -(altsems) 4290 3760 w -11 /LucidaSansUnicode00 f -(to) 4751 3760 w -(operate) 4911 3760 w -(at) 5370 3760 w -(user-level) 720 3890 w -(if) 1307 3890 w -(possible,) 1427 3890 w -(calling) 1952 3890 w -(the) 2348 3890 w -(kernel) 2566 3890 w -(otherwise.) 2947 3890 w -(It) 3583 3890 w -(suffices) 3704 3890 w -(to) 4164 3890 w -(fill) 4320 3890 w -(an) 4505 3890 w -(array) 4682 3890 w -(of) 4999 3890 w -(sema\255) 5155 3890 w -(phores) 720 4020 w -(with) 1132 4020 w -(either) 1403 4020 w -(the) 1757 4020 w -(ones) 1972 4020 w -(representing) 2269 4020 w -(messages) 2991 4020 w -(in) 3558 4020 w -(a) 3702 4020 w -(tube,) 3807 4020 w -(or) 4126 4020 w -(the) 4282 4020 w -(ones) 4497 4020 w -(representing) 4794 4020 w -(empty) 720 4150 w -(slots) 1095 4150 w -(in) 1391 4150 w -(a) 1535 4150 w -(tube,) 1640 4150 w -(depending) 1959 4150 w -(on) 2570 4150 w -(whether) 2749 4150 w -(a) 3224 4150 w -(receive) 3329 4150 w -(or) 3749 4150 w -(a) 3905 4150 w -(send) 4010 4150 w -(operation) 4309 4150 w -(is) 4865 4150 w -(selected.) 4997 4150 w -(Then, calling) 720 4280 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 -(altsems) 1441 4280 w -11 /LucidaSansUnicode00 f -(guarantees that, upon return, the) 1885 4280 w -(operation may proceed.) 3705 4280 w -11 /LucidaSans-Demi f -(6.) 720 4540 w -(Implementation) 888 4540 w -11 /LucidaSansUnicode00 f -(As) 720 4706 w -(of) 893 4706 w -(today,) 1042 4706 w -(the) 1413 4706 w -(kernel) 1625 4706 w -(is) 1999 4706 w -(operational,) 2128 4706 w -(although) 2809 4706 w -(not) 3323 4706 w -(in) 3540 4706 w -(production.) 3681 4706 w -(More) 4339 4706 w -(work) 4649 4706 w -(is) 4951 4706 w -(needed) 5080 4706 w -(in) 720 4836 w -(system) 866 4836 w -(interfaces,) 1286 4836 w -(role) 1891 4836 w -(changing,) 2143 4836 w -(and) 2713 4836 w -(memory) 2957 4836 w -(management;) 3438 4836 w -(but) 4213 4836 w -(the) 4436 4836 w -(kernel) 4652 4836 w -(is) 5030 4836 w -(active) 5163 4836 w -(enough to be) 720 4966 w -(used, at) 1465 4966 w -(least) 1927 4966 w -(for testing.) 2214 4966 w -(We) 970 5132 w -(have) 1163 5132 w -(changed) 1447 5132 w -(a) 1935 5132 w -(surprisingly) 2032 5132 w -(small) 2696 5132 w -(amount) 3016 5132 w -(of) 3460 5132 w -(code) 3605 5132 w -(at) 3896 5132 w -(this) 4035 5132 w -(point.) 4269 5132 w -(There) 4618 5132 w -(are) 4961 5132 w -(about) 5166 5132 w -(400) 720 5262 w -(lines) 977 5262 w -(of) 1277 5262 w -(new) 1435 5262 w -(assembler) 1700 5262 w -(source,) 2295 5262 w -(about) 2734 5262 w -(80) 3089 5262 w -(lines) 3276 5262 w -(of) 3575 5262 w -(platform) 3732 5262 w -(independent) 4239 5262 w -(C) 4958 5262 w -(source,) 5083 5262 w -(and) 720 5392 w -(about) 975 5392 w -(350) 1338 5392 w -(lines) 1602 5392 w -(of) 1909 5392 w -(AMD64) 2074 5392 w -(C) 2523 5392 w -(source) 2656 5392 w -(code.) 3067 5392 w -(To) 3413 5392 w -(this,) 3607 5392 w -(we) 3897 5392 w -(have) 4102 5392 w -(to) 4408 5392 w -(add) 4574 5392 w -(a) 4831 5392 w -(few) 4950 5392 w -(extra) 5196 5392 w -(source) 720 5522 w -(lines in the) 1110 5522 w -(start-up code, system call, and trap handlers.) 1736 5522 w -(This implementation is) 4250 5522 w -(being both developed and tested only in the) 720 5652 w -(AMD64 architecture.) 3117 5652 w -(We) 970 5818 w -(found) 1171 5818 w -(that) 1528 5818 w -(there) 1783 5818 w -(seems) 2105 5818 w -(to) 2487 5818 w -(be) 2639 5818 w -(no) 2814 5818 w -(performance) 2993 5818 w -(penalty) 3715 5818 w -(for) 4149 5818 w -(pre-paging,) 4346 5818 w -(which) 5031 5818 w -(is) 5384 5818 w -(interesting on its own.) 720 5948 w -(To) 970 6114 w -(dispatch) 1158 6114 w -(a) 1662 6114 w -(process) 1775 6114 w -(for) 2238 6114 w -(execution) 2443 6114 w -(at) 3018 6114 w -(one) 3172 6114 w -(AC) 3421 6114 w -(we) 3625 6114 w -(use) 3825 6114 w -(the) 4064 6114 w -(inter-core-call,) 4288 6114 w -(active) 5163 6114 w -(message, mechanism. This figure) 720 6244 w -(explains how) 2545 6244 w -(it) 3282 6244 w -(works:) 3390 6244 w -2376 7139 2376 6779 Dl -2376 6779 2916 6779 Dl -2916 6779 2916 7139 Dl -2916 7139 2376 7139 Dl -(runac) 2497 6981 w -2988 6941 2916 6959 Dl -2988 6977 2916 6959 Dl -8 /LucidaSansUnicode00 f -(.) 2905 6962 w -(.) 2941 6962 w -(.) 2977 6962 w -(.) 3013 6962 w -(.) 3049 6962 w -(.) 3085 6962 w -(.) 3121 6962 w -(.) 3157 6962 w -(.) 3193 6962 w -(.) 3229 6962 w -(.) 3265 6962 w -3204 6977 3276 6959 Dl -3204 6941 3276 6959 Dl -3276 7139 3276 6779 Dl -3276 6779 3816 6779 Dl -3816 6779 3816 7139 Dl -3816 7139 3276 7139 Dl -11 /LucidaSansUnicode00 f -(acsched) 3332 6981 w -(TC) 2574 6621 w -(AC) 3470 6621 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) 1080 3594 w +(sizes\).) 1588 3594 w +(The) 2004 3594 w +(interface) 2244 3594 w +(is) 2753 3594 w +(similar) 2881 3594 w +(to) 3281 3594 w +(that) 3429 3594 w +(for) 3680 3594 w +(Channels) 3873 3594 w +(in) 4404 3594 w +(the) 4544 3594 w +(Plan) 4755 3594 w +(9) 5017 3594 w +(thread) 5126 3594 w +(library:) 720 3724 w +9 /LucidaTypewriter f +(Tube*) 1200 3894 w +(newtube\(ulong) 1720 3894 w +(msz,) 2630 3894 w +(ulong) 2955 3894 w +(n\);) 3345 3894 w +(void) 1200 4004 w +(freetube\(Tube) 1720 4004 w +(*t\);) 2630 4004 w +(int) 1200 4114 w +(nbtrecv\(Tube) 1720 4114 w +(*t,) 2565 4114 w +(void) 2825 4114 w +(*p\);) 3150 4114 w +(int) 1200 4224 w +(nbtsend\(Tube) 1720 4224 w +(*t,) 2565 4224 w +(void) 2825 4224 w +(*p\);) 3150 4224 w +(void) 1200 4334 w +(trecv\(Tube) 1720 4334 w +(*t,) 2435 4334 w +(void) 2695 4334 w +(*p\);) 3020 4334 w +(void) 1200 4444 w +(tsend\(Tube) 1720 4444 w +(*t,) 2435 4444 w +(void) 2695 4444 w +(*p\);) 3020 4444 w +(int) 1200 4554 w +(talt\(Talt) 1720 4554 w +(a[],) 2370 4554 w +(int) 2695 4554 w +(na\);) 2955 4554 w +11 /LucidaSans-Italic f +(Newtube) 720 4780 w +11 /LucidaSansUnicode00 f +(creates) 1217 4780 w +(a) 1637 4780 w +(tube) 1735 4780 w +(for) 2012 4780 w +(the) 2202 4780 w +(given) 2410 4780 w +(message) 2734 4780 w +(size) 3239 4780 w +(and) 3490 4780 w +(number) 3726 4780 w +(of) 4178 4780 w +(messages) 4324 4780 w +(in) 4885 4780 w +(the) 5023 4780 w +(tube) 5232 4780 w +(buffer.) 720 4910 w +11 /LucidaSans-Italic f +(Tsend) 1160 4910 w +11 /LucidaSansUnicode00 f +(and) 1519 4910 w +11 /LucidaSans-Italic f +(trecv) 1761 4910 w +11 /LucidaSansUnicode00 f +(can) 2071 4910 w +(be) 2299 4910 w +(used) 2473 4910 w +(to) 2771 4910 w +(send) 2922 4910 w +(and) 3220 4910 w +(receive.) 3461 4910 w +(There) 3915 4910 w +(are) 4264 4910 w +(non-blocking) 4475 4910 w +(vari\255) 5241 4910 w +(ants,) 720 5040 w +(which) 1024 5040 w +(fail) 1376 5040 w +(instead) 1586 5040 w +(of) 2019 5040 w +(blocking) 2171 5040 w +(if) 2671 5040 w +(the) 2788 5040 w +(operation) 3003 5040 w +(cannot) 3559 5040 w +(proceed.) 3964 5040 w +(And) 4473 5040 w +(there) 4730 5040 w +(is) 5052 5040 w +(a) 5184 5040 w +11 /LucidaSans-Italic f +(talt) 5289 5040 w +11 /LucidaSansUnicode00 f +(request) 720 5170 w +(to perform alternative) 1158 5170 w +(sends and/or receives on multiple) 2364 5170 w +(tubes.) 4223 5170 w +(The) 970 5336 w +(implementation) 1230 5336 w +(is) 2130 5336 w +(a) 2279 5336 w +(simple) 2401 5336 w +(producer-consumer,) 2815 5336 w +(but,) 3981 5336 w +(because) 4256 5336 w +(of) 4752 5336 w +(the) 4922 5336 w +(sema\255) 5155 5336 w +(phores) 720 5466 w +(used,) 1127 5466 w +(it) 1457 5466 w +(is) 1570 5466 w +(able) 1698 5466 w +(to) 1962 5466 w +(run) 2110 5466 w +(at) 2331 5466 w +(user) 2473 5466 w +(space) 2744 5466 w +(without) 3088 5466 w +(entering) 3530 5466 w +(the) 4016 5466 w +(kernel) 4227 5466 w +(when) 4600 5466 w +(sends) 4923 5466 w +(and) 5274 5466 w +(receives may proceed:) 720 5596 w +9 /LucidaTypewriter f +(struct) 940 5766 w +(Tube) 1395 5766 w +({) 940 5876 w +(int) 1200 5986 w +(msz;) 1460 5986 w +(/*) 1980 5986 w +(message) 2175 5986 w +(size) 2695 5986 w +(*/) 3020 5986 w +(int) 1200 6096 w +(tsz;) 1460 6096 w +(/*) 1980 6096 w +(tube) 2175 6096 w +(size) 2500 6096 w +(\(#) 2825 6096 w +(of) 3020 6096 w +(messages\)) 3215 6096 w +(*/) 3865 6096 w +(int) 1200 6206 w +(nmsg;) 1460 6206 w +(/*) 1980 6206 w +(semaphore:) 2175 6206 w +(#) 2890 6206 w +(of) 3020 6206 w +(messages) 3215 6206 w +(in) 3800 6206 w +(tube) 3995 6206 w +(*/) 4320 6206 w +(int) 1200 6316 w +(nhole;) 1460 6316 w +(/*) 1980 6316 w +(semaphore:) 2175 6316 w +(#) 2890 6316 w +(of) 3020 6316 w +(free) 3215 6316 w +(slots) 3540 6316 w +(in) 3930 6316 w +(tube) 4125 6316 w +(*/) 4450 6316 w +(int) 1200 6426 w +(hd;) 1460 6426 w +(int) 1200 6536 w +(tl;) 1460 6536 w +(};) 940 6646 w +11 /LucidaSansUnicode00 f +(It) 970 6872 w +(is) 1079 6872 w +(feasible) 1203 6872 w +(to) 1654 6872 w +(try) 1798 6872 w +(to) 1977 6872 w +(perform) 2121 6872 w +(multiple) 2588 6872 w +(sends) 3062 6872 w +(and) 3409 6872 w +(receives) 3643 6872 w +(at) 4111 6872 w +(the) 4250 6872 w +(same) 4458 6872 w +(time,) 4776 6872 w +(waiting) 5085 6872 w +(for) 720 7002 w +(the) 926 7002 w +(chance) 1149 7002 w +(to) 1572 7002 w +(execute) 1732 7002 w +(one) 2202 7002 w +(of) 2451 7002 w +(them.) 2611 7002 w +(This) 2971 7002 w +(operation) 3248 7002 w +(exploits) 3812 7002 w +11 /LucidaSans-Italic f +(altsems) 4290 7002 w +11 /LucidaSansUnicode00 f +(to) 4751 7002 w +(operate) 4911 7002 w +(at) 5370 7002 w +(user-level) 720 7132 w +(if) 1307 7132 w +(possible,) 1427 7132 w +(calling) 1952 7132 w +(the) 2348 7132 w +(kernel) 2566 7132 w +(otherwise.) 2947 7132 w +(It) 3583 7132 w +(suffices) 3704 7132 w +(to) 4164 7132 w +(fill) 4320 7132 w +(an) 4505 7132 w +(array) 4682 7132 w +(of) 4999 7132 w +(sema\255) 5155 7132 w +(phores) 720 7262 w +(with) 1132 7262 w +(either) 1403 7262 w +(the) 1757 7262 w +(ones) 1972 7262 w +(representing) 2269 7262 w +(messages) 2991 7262 w +(in) 3558 7262 w +(a) 3702 7262 w +(tube,) 3807 7262 w +(or) 4126 7262 w +(the) 4282 7262 w +(ones) 4497 7262 w +(representing) 4794 7262 w cleartomark showpage saveobj restore @@ -4217,500 +4200,434 @@ mark 7 pagesetup 11 /LucidaSansUnicode00 f -(The) 720 850 w -(function) 955 850 w +(empty) 720 850 w +(slots) 1095 850 w +(in) 1391 850 w +(a) 1535 850 w +(tube,) 1640 850 w +(depending) 1959 850 w +(on) 2570 850 w +(whether) 2749 850 w +(a) 3224 850 w +(receive) 3329 850 w +(or) 3749 850 w +(a) 3905 850 w +(send) 4010 850 w +(operation) 4309 850 w +(is) 4865 850 w +(selected.) 4997 850 w +(Then, calling) 720 980 w 11 /LucidaSans-Italic f -(acsched) 1432 850 w -11 /LucidaSansUnicode00 f -(runs) 1892 850 w -(on) 2165 850 w -(ACs,) 2336 850 w -(as) 2615 850 w -(part) 2768 850 w -(of) 3020 850 w -(its) 3164 850 w -(start-up) 3329 850 w -(sequence.) 3810 850 w -(It) 4384 850 w -(sits) 4493 850 w -(in) 4715 850 w -(a) 4852 850 w -(tight) 4950 850 w -(loop) 5237 850 w -(spinning) 720 980 w -(on) 1231 980 w -(an) 1416 980 w -(active) 1594 980 w -(message) 1952 980 w -(function) 2468 980 w -(pointer.) 2958 980 w -(To) 3426 980 w -(ask) 3611 980 w -(the) 3841 980 w -(AC) 4061 980 w -(to) 4262 980 w -(execute) 4419 980 w -(a) 4886 980 w -(function,) 4996 980 w -(the) 720 1110 w -(TC) 929 1110 w -(sets) 1112 1110 w -(in) 1365 1110 w -(the) 1503 1110 w -(ICC) 1712 1110 w -(structure) 1935 1110 w -(for) 2456 1110 w -(the) 2648 1110 w -(AC) 2858 1110 w -(the) 3049 1110 w -(arguments,) 3259 1110 w -(indication) 3904 1110 w -(to) 4469 1110 w -(flush) 4616 1110 w -(the) 4920 1110 w -(TLB) 5130 1110 w -(or) 5360 1110 w -(not,) 720 1240 w -(and) 970 1240 w -(the) 1207 1240 w -(function) 1417 1240 w -(pointer) 1897 1240 w -(and) 2320 1240 w -(then) 2557 1240 w -(changes) 2835 1240 w -(the) 3313 1240 w -(process) 3523 1240 w -(state) 3973 1240 w -(to) 4273 1240 w +(altsems) 1441 980 w +11 /LucidaSansUnicode00 f +(guarantees that, upon return, the) 1885 980 w +(operation may proceed.) 3705 980 w +11 /LucidaSans-Demi f +(6.) 720 1240 w +(Implementation) 888 1240 w +11 /LucidaSansUnicode00 f +(As) 720 1406 w +(of) 893 1406 w +(today,) 1042 1406 w +(the) 1413 1406 w +(kernel) 1625 1406 w +(is) 1999 1406 w +(operational,) 2128 1406 w +(although) 2809 1406 w +(not) 3323 1406 w +(in) 3540 1406 w +(production.) 3681 1406 w +(More) 4339 1406 w +(work) 4649 1406 w +(is) 4951 1406 w +(needed) 5080 1406 w +(in) 720 1536 w +(system) 866 1536 w +(interfaces,) 1286 1536 w +(role) 1891 1536 w +(changing,) 2143 1536 w +(and) 2713 1536 w +(memory) 2957 1536 w +(management;) 3438 1536 w +(but) 4213 1536 w +(the) 4436 1536 w +(kernel) 4652 1536 w +(is) 5030 1536 w +(active) 5163 1536 w +(enough to be) 720 1666 w +(used, at) 1465 1666 w +(least) 1927 1666 w +(for testing.) 2214 1666 w +(We) 970 1832 w +(have) 1163 1832 w +(changed) 1447 1832 w +(a) 1935 1832 w +(surprisingly) 2032 1832 w +(small) 2696 1832 w +(amount) 3016 1832 w +(of) 3460 1832 w +(code) 3605 1832 w +(at) 3896 1832 w +(this) 4035 1832 w +(point.) 4269 1832 w +(There) 4618 1832 w +(are) 4961 1832 w +(about) 5166 1832 w +(400) 720 1962 w +(lines) 977 1962 w +(of) 1277 1962 w +(new) 1435 1962 w +(assembler) 1700 1962 w +(source,) 2295 1962 w +(about) 2734 1962 w +(80) 3089 1962 w +(lines) 3276 1962 w +(of) 3575 1962 w +(platform) 3732 1962 w +(independent) 4239 1962 w +(C) 4958 1962 w +(source,) 5083 1962 w +(and) 720 2092 w +(about) 975 2092 w +(350) 1338 2092 w +(lines) 1602 2092 w +(of) 1909 2092 w +(AMD64) 2074 2092 w +(C) 2523 2092 w +(source) 2656 2092 w +(code.) 3067 2092 w +(To) 3413 2092 w +(this,) 3607 2092 w +(we) 3897 2092 w +(have) 4102 2092 w +(to) 4408 2092 w +(add) 4574 2092 w +(a) 4831 2092 w +(few) 4950 2092 w +(extra) 5196 2092 w +(source) 720 2222 w +(lines in the) 1110 2222 w +(start-up code, system call, and trap handlers.) 1736 2222 w +(This implementation is) 4250 2222 w +(being both developed and tested only in the) 720 2352 w +(AMD64 architecture.) 3117 2352 w +(We) 970 2518 w +(found) 1171 2518 w +(that) 1528 2518 w +(there) 1783 2518 w +(seems) 2105 2518 w +(to) 2487 2518 w +(be) 2639 2518 w +(no) 2814 2518 w +(performance) 2993 2518 w +(penalty) 3715 2518 w +(for) 4149 2518 w +(pre-paging,) 4346 2518 w +(which) 5031 2518 w +(is) 5384 2518 w +(interesting on its own.) 720 2648 w +(To) 970 2814 w +(dispatch) 1158 2814 w +(a) 1662 2814 w +(process) 1775 2814 w +(for) 2238 2814 w +(execution) 2443 2814 w +(at) 3018 2814 w +(one) 3172 2814 w +(AC) 3421 2814 w +(we) 3625 2814 w +(use) 3825 2814 w +(the) 4064 2814 w +(inter-core-call,) 4288 2814 w +(active) 5163 2814 w +(message, mechanism. This figure) 720 2944 w +(explains how) 2545 2944 w +(it) 3282 2944 w +(works:) 3390 2944 w +2376 3839 2376 3479 Dl +2376 3479 2916 3479 Dl +2916 3479 2916 3839 Dl +2916 3839 2376 3839 Dl +(runac) 2497 3681 w +2988 3641 2916 3659 Dl +2988 3677 2916 3659 Dl +8 /LucidaSansUnicode00 f +(.) 2905 3662 w +(.) 2941 3662 w +(.) 2977 3662 w +(.) 3013 3662 w +(.) 3049 3662 w +(.) 3085 3662 w +(.) 3121 3662 w +(.) 3157 3662 w +(.) 3193 3662 w +(.) 3229 3662 w +(.) 3265 3662 w +3204 3677 3276 3659 Dl +3204 3641 3276 3659 Dl +3276 3839 3276 3479 Dl +3276 3479 3816 3479 Dl +3816 3479 3816 3839 Dl +3816 3839 3276 3839 Dl +11 /LucidaSansUnicode00 f +(acsched) 3332 3681 w +(TC) 2574 3321 w +(AC) 3470 3321 w +(The) 720 4089 w +(function) 955 4089 w 11 /LucidaSans-Italic f -(Exotic) 4419 1240 w -11 /LucidaSansUnicode00 f -(,) 4731 1240 w -(which) 4804 1240 w -(would) 5151 1240 w -(block) 720 1370 w -(the) 1047 1370 w -(process) 1258 1370 w -(for) 1709 1370 w -(the) 1902 1370 w -(moment.) 2113 1370 w -(When) 2665 1370 w -(the) 2998 1370 w -(pointer) 3209 1370 w -(becomes) 3633 1370 w -(non-nil,) 4147 1370 w -(the) 4621 1370 w -(AC) 4832 1370 w -(calls) 5024 1370 w -(the) 5301 1370 w -(function.) 720 1500 w -(The) 1269 1500 w -(function) 1506 1500 w -(pointer) 1985 1500 w -(uses) 2407 1500 w -(a) 2687 1500 w -(cache) 2786 1500 w -(line) 3127 1500 w -(and) 3359 1500 w -(all) 3595 1500 w -(other) 3758 1500 w -(arguments) 4079 1500 w -(use) 4688 1500 w -(a) 4912 1500 w -(different) 5011 1500 w -(cache) 720 1630 w -(line,) 1070 1630 w -(so) 1346 1630 w -(that) 1517 1630 w -(polling) 1776 1630 w -(can) 2192 1630 w -(be) 2425 1630 w -(efficient) 2604 1630 w -(regarding) 3087 1630 w -(bus) 3653 1630 w -(transactions.) 3894 1630 w -(Once) 4664 1630 w -(the) 4984 1630 w -(func\255) 5203 1630 w -(tion) 720 1760 w -(is) 970 1760 w -(done,) 1100 1760 w -(the) 1443 1760 w -(AC) 1656 1760 w -(sets) 1850 1760 w -(the) 2107 1760 w -(function) 2320 1760 w -(pointer) 2803 1760 w -(to) 3229 1760 w -(nil) 3379 1760 w -(and) 3553 1760 w -(calls) 3793 1760 w +(acsched) 1432 4089 w +11 /LucidaSansUnicode00 f +(runs) 1892 4089 w +(on) 2165 4089 w +(ACs,) 2336 4089 w +(as) 2615 4089 w +(part) 2768 4089 w +(of) 3020 4089 w +(its) 3164 4089 w +(start-up) 3329 4089 w +(sequence.) 3810 4089 w +(It) 4384 4089 w +(sits) 4493 4089 w +(in) 4715 4089 w +(a) 4852 4089 w +(tight) 4950 4089 w +(loop) 5237 4089 w +(spinning) 720 4219 w +(on) 1231 4219 w +(an) 1416 4219 w +(active) 1594 4219 w +(message) 1952 4219 w +(function) 2468 4219 w +(pointer.) 2958 4219 w +(To) 3426 4219 w +(ask) 3611 4219 w +(the) 3841 4219 w +(AC) 4061 4219 w +(to) 4262 4219 w +(execute) 4419 4219 w +(a) 4886 4219 w +(function,) 4996 4219 w +(the) 720 4349 w +(TC) 929 4349 w +(sets) 1112 4349 w +(in) 1365 4349 w +(the) 1503 4349 w +(ICC) 1712 4349 w +(structure) 1935 4349 w +(for) 2456 4349 w +(the) 2648 4349 w +(AC) 2858 4349 w +(the) 3049 4349 w +(arguments,) 3259 4349 w +(indication) 3904 4349 w +(to) 4469 4349 w +(flush) 4616 4349 w +(the) 4920 4349 w +(TLB) 5130 4349 w +(or) 5360 4349 w +(not,) 720 4479 w +(and) 970 4479 w +(the) 1207 4479 w +(function) 1417 4479 w +(pointer) 1897 4479 w +(and) 2320 4479 w +(then) 2557 4479 w +(changes) 2835 4479 w +(the) 3313 4479 w +(process) 3523 4479 w +(state) 3973 4479 w +(to) 4273 4479 w 11 /LucidaSans-Italic f -(ready) 4072 1760 w -11 /LucidaSansUnicode00 f -(on) 4420 1760 w -(the) 4597 1760 w -(process) 4809 1760 w -(that) 5261 1760 w -(scheduled the) 720 1890 w -(function for execution.) 1503 1890 w -(You think) 2795 1890 w -(of) 3341 1890 w -(this as a) 3484 1890 w -(soft) 3964 1890 w -(IPI.) 4204 1890 w -(While) 970 2056 w -(an) 1296 2056 w -(AC) 1462 2056 w -(is) 1651 2056 w -(performing) 1776 2056 w -(an) 2412 2056 w -(action) 2578 2056 w -(dictated) 2940 2056 w -(by) 3408 2056 w -(a) 3571 2056 w -(process) 3670 2056 w -(in) 4119 2056 w -(the) 4257 2056 w -(TC,) 4466 2056 w -(its) 4684 2056 w +(Exotic) 4419 4479 w +11 /LucidaSansUnicode00 f +(,) 4731 4479 w +(which) 4804 4479 w +(would) 5151 4479 w +(block) 720 4609 w +(the) 1047 4609 w +(process) 1258 4609 w +(for) 1709 4609 w +(the) 1902 4609 w +(moment.) 2113 4609 w +(When) 2665 4609 w +(the) 2998 4609 w +(pointer) 3209 4609 w +(becomes) 3633 4609 w +(non-nil,) 4147 4609 w +(the) 4621 4609 w +(AC) 4832 4609 w +(calls) 5024 4609 w +(the) 5301 4609 w +(function.) 720 4739 w +(The) 1269 4739 w +(function) 1506 4739 w +(pointer) 1985 4739 w +(uses) 2407 4739 w +(a) 2687 4739 w +(cache) 2786 4739 w +(line) 3127 4739 w +(and) 3359 4739 w +(all) 3595 4739 w +(other) 3758 4739 w +(arguments) 4079 4739 w +(use) 4688 4739 w +(a) 4912 4739 w +(different) 5011 4739 w +(cache) 720 4869 w +(line,) 1070 4869 w +(so) 1346 4869 w +(that) 1517 4869 w +(polling) 1776 4869 w +(can) 2192 4869 w +(be) 2425 4869 w +(efficient) 2604 4869 w +(regarding) 3087 4869 w +(bus) 3653 4869 w +(transactions.) 3894 4869 w +(Once) 4664 4869 w +(the) 4984 4869 w +(func\255) 5203 4869 w +(tion) 720 4999 w +(is) 970 4999 w +(done,) 1100 4999 w +(the) 1443 4999 w +(AC) 1656 4999 w +(sets) 1850 4999 w +(the) 2107 4999 w +(function) 2320 4999 w +(pointer) 2803 4999 w +(to) 3229 4999 w +(nil) 3379 4999 w +(and) 3553 4999 w +(calls) 3793 4999 w 11 /LucidaSans-Italic f -(Mach) 4851 2056 w -11 /LucidaSansUnicode00 f -(struc\255) 5170 2056 w -(ture) 720 2186 w -(points) 976 2186 w -(to) 1348 2186 w -(the) 1495 2186 w -(process) 1705 2186 w -(so) 2155 2186 w -(that) 2317 2186 w +(ready) 4072 4999 w +11 /LucidaSansUnicode00 f +(on) 4420 4999 w +(the) 4597 4999 w +(process) 4809 4999 w +(that) 5261 4999 w +(scheduled the) 720 5129 w +(function for execution.) 1503 5129 w +(You think) 2795 5129 w +(of) 3341 5129 w +(this as a) 3484 5129 w +(soft) 3964 5129 w +(IPI.) 4204 5129 w +(While) 970 5295 w +(an) 1296 5295 w +(AC) 1462 5295 w +(is) 1651 5295 w +(performing) 1776 5295 w +(an) 2412 5295 w +(action) 2578 5295 w +(dictated) 2940 5295 w +(by) 3408 5295 w +(a) 3571 5295 w +(process) 3670 5295 w +(in) 4119 5295 w +(the) 4257 5295 w +(TC,) 4466 5295 w +(its) 4684 5295 w 11 /LucidaSans-Italic f -(up) 2567 2186 w -11 /LucidaSansUnicode00 f -(in) 2741 2186 w -(the) 2880 2186 w -(AC) 3090 2186 w -(refers) 3281 2186 w -(to) 3631 2186 w -(the) 3778 2186 w -(process.) 3988 2186 w -(The) 4473 2186 w -(process) 4711 2186 w -(refers) 5161 2186 w -(to) 720 2316 w -(the) 866 2316 w -(AC) 1075 2316 w -(via) 1265 2316 w -(a) 1453 2316 w -(new) 1552 2316 w -(field) 1805 2316 w +(Mach) 4851 5295 w +11 /LucidaSansUnicode00 f +(struc\255) 5170 5295 w +(ture) 720 5425 w +(points) 976 5425 w +(to) 1348 5425 w +(the) 1495 5425 w +(process) 1705 5425 w +(so) 2155 5425 w +(that) 2317 5425 w 11 /LucidaSans-Italic f -(Mach.ac) 2079 2316 w -11 /LucidaSansUnicode00 f -(.) 2517 2316 w -(Should) 2625 2316 w -(the) 3026 2316 w -(AC) 3235 2316 w -(become) 3425 2316 w -(idle,) 3881 2316 w -(its) 4150 2316 w +(up) 2567 5425 w +11 /LucidaSansUnicode00 f +(in) 2741 5425 w +(the) 2880 5425 w +(AC) 3090 5425 w +(refers) 3281 5425 w +(to) 3631 5425 w +(the) 3778 5425 w +(process.) 3988 5425 w +(The) 4473 5425 w +(process) 4711 5425 w +(refers) 5161 5425 w +(to) 720 5555 w +(the) 866 5555 w +(AC) 1075 5555 w +(via) 1265 5555 w +(a) 1453 5555 w +(new) 1552 5555 w +(field) 1805 5555 w 11 /LucidaSans-Italic f -(Mach.proc) 4318 2316 w -11 /LucidaSansUnicode00 f -(field) 4911 2316 w -(is) 5186 2316 w -(set) 5313 2316 w -(to nil.) 720 2446 w -(This) 970 2612 w -(mechanism) 1234 2612 w -(is) 1881 2612 w -(kind) 2009 2612 w -(of) 2282 2612 w -(like) 2430 2612 w -(a) 2660 2612 w -(vm_exit\(\).) 2761 2612 w -(While) 3359 2612 w -(we) 3688 2612 w -(could) 3875 2612 w -(think) 4207 2612 w -(about) 4520 2612 w -(implement\255) 4866 2612 w -(ing) 720 2742 w -(this) 936 2742 w -(with) 1181 2742 w -(vm_enter\(\),) 1455 2742 w -(it) 2102 2742 w +(Mach.ac) 2079 5555 w +11 /LucidaSansUnicode00 f +(.) 2517 5555 w +(Should) 2625 5555 w +(the) 3026 5555 w +(AC) 3235 5555 w +(become) 3425 5555 w +(idle,) 3881 5555 w +(its) 4150 5555 w +11 /LucidaSans-Italic f +(Mach.proc) 4318 5555 w +11 /LucidaSansUnicode00 f +(field) 4911 5555 w +(is) 5186 5555 w +(set) 5313 5555 w +(to nil.) 720 5685 w +(This) 970 5851 w +(mechanism) 1234 5851 w +(is) 1881 5851 w +(kind) 2009 5851 w +(of) 2282 5851 w +(like) 2430 5851 w +(a) 2660 5851 w +(vm_exit\(\).) 2761 5851 w +(While) 3359 5851 w +(we) 3688 5851 w +(could) 3875 5851 w +(think) 4207 5851 w +(about) 4520 5851 w +(implement\255) 4866 5851 w +(ing) 720 5981 w +(this) 936 5981 w +(with) 1181 5981 w +(vm_enter\(\),) 1455 5981 w +(it) 2102 5981 w 11 /LucidaSansUnicode20 f -(\031) 2175 2742 w -11 /LucidaSansUnicode00 f -(s) 2210 2742 w -(not) 2314 2742 w -(quite) 2538 2742 w -(clear) 2858 2742 w -(we) 3161 2742 w -(should) 3355 2742 w -(take) 3762 2742 w -(that) 4037 2742 w -(step.) 4295 2742 w -(VMs) 4640 2742 w -(have) 4910 2742 w -(over\255) 5205 2742 w -(head,) 720 2872 w -(at) 1064 2872 w -(least) 1216 2872 w -(when) 1518 2872 w -(compared) 1851 2872 w -(to) 2432 2872 w -(the) 2590 2872 w -(mechanism) 2811 2872 w -(we) 3468 2872 w -(use.) 3665 2872 w -(This) 3971 2872 w -(mechanism) 4246 2872 w -(is) 4903 2872 w -(used) 5041 2872 w -(by) 5346 2872 w -(NIX to dispatch processes to ACs, as shown:) 720 3002 w -1926 3537 1926 3177 Dl -1926 3177 2466 3177 Dl -2466 3177 2466 3537 Dl -2466 3537 1926 3537 Dl -(user code) 1936 3379 w -2196 3537 2196 3897 Dl -2178 3825 2196 3897 Dl -2214 3825 2196 3897 Dl -1926 4257 1926 3897 Dl -1926 3897 2466 3897 Dl -2466 3897 2466 4257 Dl -2466 4257 1926 4257 Dl -(execac) 2014 4099 w -2466 4077 2826 4077 Dl -2754 4095 2826 4077 Dl -2754 4059 2826 4077 Dl -2826 4257 2826 3897 Dl -2826 3897 3366 3897 Dl -3366 3897 3366 4257 Dl -3366 4257 2826 4257 Dl -(runacore) 2860 4099 w -8 /LucidaSansUnicode00 f -(.) 3355 4080 w -(.) 3391 4080 w -(.) 3427 4080 w -(.) 3463 4080 w -(.) 3499 4080 w -(.) 3535 4080 w -(.) 3571 4080 w -(.) 3607 4080 w -(.) 3643 4080 w -(.) 3679 4080 w -(.) 3715 4080 w -3654 4095 3726 4077 Dl -3654 4059 3726 4077 Dl -3726 4257 3726 3897 Dl -3726 3897 4266 3897 Dl -4266 3897 4266 4257 Dl -4266 4257 3726 4257 Dl -11 /LucidaSansUnicode00 f -(actouser) 3768 4099 w -3996 3897 3996 3537 Dl -4014 3609 3996 3537 Dl -3978 3609 3996 3537 Dl -3726 3537 3726 3177 Dl -3726 3177 4266 3177 Dl -4266 3177 4266 3537 Dl -4266 3537 3726 3537 Dl -(user code) 3736 3379 w -(A) 720 4507 w -(process) 855 4507 w -(that) 1325 4507 w -(calls) 1595 4507 w -(the) 1891 4507 w -(new) 2122 4507 w -(system) 2397 4507 w -(call,) 2831 4507 w -11 /LucidaSans-Italic f -(execac) 3107 4507 w -11 /LucidaSansUnicode00 f -(\(or) 3519 4507 w -(uses) 3727 4507 w -(the) 4029 4507 w -11 /LucidaSans-Italic f -(RFCORE) 4260 4507 w -11 /LucidaSansUnicode00 f -(flag) 4739 4507 w -(in) 5001 4507 w -11 /LucidaSans-Italic f -(rfork) 5161 4507 w -11 /LucidaSansUnicode00 f -(\)) 5436 4507 w -(makes) 720 4637 w -(the) 1112 4637 w -(kernel) 1330 4637 w -(call) 1710 4637 w -11 /LucidaSans-Italic f -(runacore) 1938 4637 w -11 /LucidaSansUnicode00 f -(in) 2470 4637 w -(the) 2617 4637 w -(context) 2835 4637 w -(of) 3284 4637 w -(the) 3439 4637 w -(process.) 3657 4637 w -(This) 4150 4637 w -(function) 4422 4637 w -(makes) 4910 4637 w -(the) 5301 4637 w -(process) 720 4767 w -(become) 1172 4767 w -(a) 1631 4767 w -(handler) 1733 4767 w -(for) 2179 4767 w -(the) 2373 4767 w -(actual) 2585 4767 w -(process,) 2945 4767 w -(which) 3432 4767 w -(would) 3783 4767 w -(be) 4146 4767 w -(running) 4319 4767 w -(from) 4778 4767 w -(now) 5075 4767 w -(on) 5337 4767 w -(on) 720 4897 w -(the) 895 4897 w -(AC.) 1106 4897 w -(To) 1368 4897 w -(do) 1544 4897 w -(so,) 1720 4897 w -11 /LucidaSans-Italic f -(runacore) 1918 4897 w -11 /LucidaSansUnicode00 f -(calls) 2443 4897 w -11 /LucidaSans-Italic f -(runac) 2720 4897 w -11 /LucidaSansUnicode00 f -(to) 3070 4897 w -(execute) 3217 4897 w -11 /LucidaSans-Italic f -(actouser) 3674 4897 w -11 /LucidaSansUnicode00 f -(on) 4173 4897 w -(the) 4347 4897 w -(AP) 4557 4897 w -(selected.) 4733 4897 w -(This) 5247 4897 w -(transfers) 720 5027 w -(control) 1231 5027 w -(to) 1643 5027 w -(user-mode,) 1787 5027 w -(restoring) 2453 5027 w -(the) 2973 5027 w -(state) 3181 5027 w -(as) 3479 5027 w -(saved) 3633 5027 w -(in) 3975 5027 w -(the) 4112 5027 w -11 /LucidaSans-Italic f -(Ureg) 4320 5027 w -11 /LucidaSansUnicode00 f -(kept) 4611 5027 w -(by) 4884 5027 w -(the) 5047 5027 w -(pro\255) 5255 5027 w -(cess) 720 5157 w -(in) 993 5157 w -(its) 1136 5157 w -(kernel) 1308 5157 w -(stack.) 1684 5157 w -(Both) 2040 5157 w -11 /LucidaSans-Italic f -(actouser) 2323 5157 w -11 /LucidaSansUnicode00 f -(and) 2826 5157 w -(any) 3067 5157 w -(kernel) 3296 5157 w -(handler) 3672 5157 w -(executing) 4120 5157 w -(in) 4686 5157 w -(the) 4828 5157 w -(AC) 5041 5157 w -(runs) 5235 5157 w -(using the) 720 5287 w -11 /LucidaSans-Italic f -(Mach) 1253 5287 w -11 /LucidaSansUnicode00 f -(stack.) 1569 5287 w -(The) 970 5453 w -(user) 1217 5453 w -(code) 1496 5453 w -(runs) 1798 5453 w -(undisturbed) 2083 5453 w -(in) 2778 5453 w -(the) 2926 5453 w -(AC) 3146 5453 w -(while) 3347 5453 w -(the) 3675 5453 w -(\(handler\)) 3895 5453 w -(process) 4421 5453 w -(is) 4881 5453 w -(blocked,) 5018 5453 w -(waiting) 720 5583 w -(for) 1143 5583 w -(the) 1332 5583 w -(ICC) 1539 5583 w -(to) 1759 5583 w -(complete.) 1903 5583 w -(That) 2465 5583 w -(happens) 2740 5583 w -(as) 3229 5583 w -(soon) 3382 5583 w -(as) 3676 5583 w -(there) 3829 5583 w -(is a) 4142 5583 w -(fault) 4361 5583 w -(or a) 4639 5583 w -(system call) 4882 5583 w -(in the) 720 5713 w -(AC.) 1061 5713 w -(When) 970 5879 w -(an) 1300 5879 w -(AP) 1466 5879 w -(takes) 1640 5879 w -(a) 1961 5879 w -(fault,) 2059 5879 w -(the) 2374 5879 w -(AP) 2582 5879 w -(transfers) 2756 5879 w -(control) 3268 5879 w -(of) 3681 5879 w -(the) 3827 5879 w -(process) 4036 5879 w -(back) 4485 5879 w -(to) 4773 5879 w -(the) 4919 5879 w -(TC,) 5128 5879 w -(by) 5346 5879 w -(finishing) 720 6009 w -(the) 1231 6009 w -(ICC,) 1448 6009 w -(and) 1713 6009 w -(then) 1957 6009 w -(waits) 2242 6009 w -(for) 2563 6009 w -(directions.) 2761 6009 w -(That) 3369 6009 w -(is,) 3653 6009 w -(the) 3821 6009 w -(AP) 4037 6009 w -(spins) 4219 6009 w -(on) 4545 6009 w -(the) 4725 6009 w -(ICC) 4941 6009 w -(struc\255) 5170 6009 w -(ture) 720 6139 w -(waiting for a) 971 6139 w -(new) 1677 6139 w -(call.) 1927 6139 w +(\031) 2175 5981 w +11 /LucidaSansUnicode00 f +(s) 2210 5981 w +(not) 2314 5981 w +(quite) 2538 5981 w +(clear) 2858 5981 w +(we) 3161 5981 w +(should) 3355 5981 w +(take) 3762 5981 w +(that) 4037 5981 w +(step.) 4295 5981 w +(VMs) 4640 5981 w +(have) 4910 5981 w +(over\255) 5205 5981 w +(head,) 720 6111 w +(at) 1064 6111 w +(least) 1216 6111 w +(when) 1518 6111 w +(compared) 1851 6111 w +(to) 2432 6111 w +(the) 2590 6111 w +(mechanism) 2811 6111 w +(we) 3468 6111 w +(use.) 3665 6111 w +(This) 3971 6111 w +(mechanism) 4246 6111 w +(is) 4903 6111 w +(used) 5041 6111 w +(by) 5346 6111 w +(NIX to dispatch processes to ACs, as shown:) 720 6241 w cleartomark showpage saveobj restore @@ -4719,429 +4636,321 @@ /saveobj save def mark 8 pagesetup -3276 1210 3276 850 Dl -3276 850 3816 850 Dl -3816 850 3816 1210 Dl -3816 1210 3276 1210 Dl -11 /LucidaSansUnicode00 f -(user code) 3286 1052 w -3546 1210 3546 1570 Dl -3528 1498 3546 1570 Dl -3564 1498 3546 1570 Dl -(trap) 3581 1412 w -3276 1930 3276 1570 Dl -3276 1570 3816 1570 Dl -3816 1570 3816 1930 Dl -3816 1930 3276 1930 Dl -(actrap) 3380 1772 w +1926 1210 1926 850 Dl +1926 850 2466 850 Dl +2466 850 2466 1210 Dl +2466 1210 1926 1210 Dl +11 /LucidaSansUnicode00 f +(user code) 1936 1052 w +2196 1210 2196 1570 Dl +2178 1498 2196 1570 Dl +2214 1498 2196 1570 Dl +1926 1930 1926 1570 Dl +1926 1570 2466 1570 Dl +2466 1570 2466 1930 Dl +2466 1930 1926 1930 Dl +(execac) 2014 1772 w +2466 1750 2826 1750 Dl +2754 1768 2826 1750 Dl +2754 1732 2826 1750 Dl +2826 1930 2826 1570 Dl +2826 1570 3366 1570 Dl +3366 1570 3366 1930 Dl +3366 1930 2826 1930 Dl +(runacore) 2860 1772 w 8 /LucidaSansUnicode00 f -(.) 3265 1753 w -(.) 3229 1753 w -(.) 3193 1753 w -(.) 3157 1753 w -(.) 3121 1753 w -(.) 3085 1753 w -(.) 3049 1753 w -(.) 3013 1753 w -(.) 2977 1753 w -(.) 2941 1753 w -(.) 2905 1753 w -2988 1732 2916 1750 Dl -2988 1768 2916 1750 Dl -2376 1930 2376 1570 Dl -2376 1570 2916 1570 Dl -2916 1570 2916 1930 Dl -2916 1930 2376 1930 Dl -11 /LucidaSansUnicode00 f -(runacore) 2410 1772 w -(The) 720 2144 w -(handling) 978 2144 w -(process,) 1503 2144 w -(running) 2009 2144 w +(.) 3355 1753 w +(.) 3391 1753 w +(.) 3427 1753 w +(.) 3463 1753 w +(.) 3499 1753 w +(.) 3535 1753 w +(.) 3571 1753 w +(.) 3607 1753 w +(.) 3643 1753 w +(.) 3679 1753 w +(.) 3715 1753 w +3654 1768 3726 1750 Dl +3654 1732 3726 1750 Dl +3726 1930 3726 1570 Dl +3726 1570 4266 1570 Dl +4266 1570 4266 1930 Dl +4266 1930 3726 1930 Dl +11 /LucidaSansUnicode00 f +(actouser) 3768 1772 w +3996 1570 3996 1210 Dl +4014 1282 3996 1210 Dl +3978 1282 3996 1210 Dl +3726 1210 3726 850 Dl +3726 850 4266 850 Dl +4266 850 4266 1210 Dl +4266 1210 3726 1210 Dl +(user code) 3736 1052 w +(A) 720 2180 w +(process) 855 2180 w +(that) 1325 2180 w +(calls) 1595 2180 w +(the) 1891 2180 w +(new) 2122 2180 w +(system) 2397 2180 w +(call,) 2831 2180 w 11 /LucidaSans-Italic f -(runacore) 2486 2144 w -11 /LucidaSansUnicode00 f -(,) 2971 2144 w -(handles) 3066 2144 w -(the) 3542 2144 w -(fault) 3773 2144 w -(and) 4076 2144 w -(issues) 4334 2144 w -(a) 4724 2144 w -(new) 4845 2144 w -(ICC) 5120 2144 w -(to) 5364 2144 w -(make) 720 2274 w -(the) 1056 2274 w -(AP) 1274 2274 w -(return) 1458 2274 w -(from) 1834 2274 w -(the) 2136 2274 w -(trap,) 2354 2274 w -(so) 2652 2274 w -(that) 2822 2274 w -(the) 3079 2274 w -(process) 3296 2274 w -(continues) 3753 2274 w -(execution) 4317 2274 w -(in) 4886 2274 w -(its) 5032 2274 w -(core.) 5207 2274 w -(The) 720 2404 w -(trap might) 954 2404 w -(kill) 1551 2404 w -(the) 1746 2404 w -(process, in which case) 1952 2404 w -(the) 3182 2404 w -(AC) 3388 2404 w -(is released and becomes idle.) 3575 2404 w -2376 3659 2376 3299 Dl -2376 3299 2916 3299 Dl -2916 3299 2916 3659 Dl -2916 3659 2376 3659 Dl -(runacore) 2410 3501 w +(execac) 3107 2180 w +11 /LucidaSansUnicode00 f +(\(or) 3519 2180 w +(uses) 3727 2180 w +(the) 4029 2180 w +11 /LucidaSans-Italic f +(RFCORE) 4260 2180 w +11 /LucidaSansUnicode00 f +(flag) 4739 2180 w +(in) 5001 2180 w +11 /LucidaSans-Italic f +(rfork) 5161 2180 w +11 /LucidaSansUnicode00 f +(\)) 5436 2180 w +(makes) 720 2310 w +(the) 1112 2310 w +(kernel) 1330 2310 w +(call) 1710 2310 w +11 /LucidaSans-Italic f +(runacore) 1938 2310 w +11 /LucidaSansUnicode00 f +(in) 2470 2310 w +(the) 2617 2310 w +(context) 2835 2310 w +(of) 3284 2310 w +(the) 3439 2310 w +(process.) 3657 2310 w +(This) 4150 2310 w +(function) 4422 2310 w +(makes) 4910 2310 w +(the) 5301 2310 w +(process) 720 2440 w +(become) 1172 2440 w +(a) 1631 2440 w +(handler) 1733 2440 w +(for) 2179 2440 w +(the) 2373 2440 w +(actual) 2585 2440 w +(process,) 2945 2440 w +(which) 3432 2440 w +(would) 3783 2440 w +(be) 4146 2440 w +(running) 4319 2440 w +(from) 4778 2440 w +(now) 5075 2440 w +(on) 5337 2440 w +(on) 720 2570 w +(the) 895 2570 w +(AC.) 1106 2570 w +(To) 1368 2570 w +(do) 1544 2570 w +(so,) 1720 2570 w +11 /LucidaSans-Italic f +(runacore) 1918 2570 w +11 /LucidaSansUnicode00 f +(calls) 2443 2570 w +11 /LucidaSans-Italic f +(runac) 2720 2570 w +11 /LucidaSansUnicode00 f +(to) 3070 2570 w +(execute) 3217 2570 w +11 /LucidaSans-Italic f +(actouser) 3674 2570 w +11 /LucidaSansUnicode00 f +(on) 4173 2570 w +(the) 4347 2570 w +(AP) 4557 2570 w +(selected.) 4733 2570 w +(This) 5247 2570 w +(transfers) 720 2700 w +(control) 1231 2700 w +(to) 1643 2700 w +(user-mode,) 1787 2700 w +(restoring) 2453 2700 w +(the) 2973 2700 w +(state) 3181 2700 w +(as) 3479 2700 w +(saved) 3633 2700 w +(in) 3975 2700 w +(the) 4112 2700 w +11 /LucidaSans-Italic f +(Ureg) 4320 2700 w +11 /LucidaSansUnicode00 f +(kept) 4611 2700 w +(by) 4884 2700 w +(the) 5047 2700 w +(pro\255) 5255 2700 w +(cess) 720 2830 w +(in) 993 2830 w +(its) 1136 2830 w +(kernel) 1308 2830 w +(stack.) 1684 2830 w +(Both) 2040 2830 w +11 /LucidaSans-Italic f +(actouser) 2323 2830 w +11 /LucidaSansUnicode00 f +(and) 2826 2830 w +(any) 3067 2830 w +(kernel) 3296 2830 w +(handler) 3672 2830 w +(executing) 4120 2830 w +(in) 4686 2830 w +(the) 4828 2830 w +(AC) 5041 2830 w +(runs) 5235 2830 w +(using the) 720 2960 w +11 /LucidaSans-Italic f +(Mach) 1253 2960 w +11 /LucidaSansUnicode00 f +(stack.) 1569 2960 w +(The) 970 3126 w +(user) 1217 3126 w +(code) 1496 3126 w +(runs) 1798 3126 w +(undisturbed) 2083 3126 w +(in) 2778 3126 w +(the) 2926 3126 w +(AC) 3146 3126 w +(while) 3347 3126 w +(the) 3675 3126 w +(\(handler\)) 3895 3126 w +(process) 4421 3126 w +(is) 4881 3126 w +(blocked,) 5018 3126 w +(waiting) 720 3256 w +(for) 1143 3256 w +(the) 1332 3256 w +(ICC) 1539 3256 w +(to) 1759 3256 w +(complete.) 1903 3256 w +(That) 2465 3256 w +(happens) 2740 3256 w +(as) 3229 3256 w +(soon) 3382 3256 w +(as) 3676 3256 w +(there) 3829 3256 w +(is a) 4142 3256 w +(fault) 4361 3256 w +(or a) 4639 3256 w +(system call) 4882 3256 w +(in the) 720 3386 w +(AC.) 1061 3386 w +(When) 970 3552 w +(an) 1300 3552 w +(AP) 1466 3552 w +(takes) 1640 3552 w +(a) 1961 3552 w +(fault,) 2059 3552 w +(the) 2374 3552 w +(AP) 2582 3552 w +(transfers) 2756 3552 w +(control) 3268 3552 w +(of) 3681 3552 w +(the) 3827 3552 w +(process) 4036 3552 w +(back) 4485 3552 w +(to) 4773 3552 w +(the) 4919 3552 w +(TC,) 5128 3552 w +(by) 5346 3552 w +(finishing) 720 3682 w +(the) 1231 3682 w +(ICC,) 1448 3682 w +(and) 1713 3682 w +(then) 1957 3682 w +(waits) 2242 3682 w +(for) 2563 3682 w +(directions.) 2761 3682 w +(That) 3369 3682 w +(is,) 3653 3682 w +(the) 3821 3682 w +(AP) 4037 3682 w +(spins) 4219 3682 w +(on) 4545 3682 w +(the) 4725 3682 w +(ICC) 4941 3682 w +(struc\255) 5170 3682 w +(ture) 720 3812 w +(waiting for a) 971 3812 w +(new) 1677 3812 w +(call.) 1927 3812 w +3276 4347 3276 3987 Dl +3276 3987 3816 3987 Dl +3816 3987 3816 4347 Dl +3816 4347 3276 4347 Dl +(user code) 3286 4189 w +3546 4347 3546 4707 Dl +3528 4635 3546 4707 Dl +3564 4635 3546 4707 Dl +(trap) 3581 4549 w +3276 5067 3276 4707 Dl +3276 4707 3816 4707 Dl +3816 4707 3816 5067 Dl +3816 5067 3276 5067 Dl +(actrap) 3380 4909 w 8 /LucidaSansUnicode00 f -(.) 2905 3482 w -(.) 2941 3482 w -(.) 2977 3482 w -(.) 3013 3482 w -(.) 3049 3482 w -(.) 3085 3482 w -(.) 3121 3482 w -(.) 3157 3482 w -(.) 3193 3482 w -(.) 3229 3482 w -(.) 3265 3482 w -3204 3497 3276 3479 Dl -3204 3461 3276 3479 Dl -3276 3659 3276 3299 Dl -3276 3299 3816 3299 Dl -3816 3299 3816 3659 Dl -3816 3659 3276 3659 Dl -11 /LucidaSansUnicode00 f -(actrapret) 3306 3501 w -3546 3299 3546 2939 Dl -3564 3011 3546 2939 Dl -3528 3011 3546 2939 Dl -3276 2939 3276 2579 Dl -3276 2579 3816 2579 Dl -3816 2579 3816 2939 Dl -3816 2939 3276 2939 Dl -(user code) 3286 2781 w -2664 3731 2646 3659 Dl -2628 3731 2646 3659 Dl -2646 3659 2646 4019 Dl -2628 3947 2646 4019 Dl -2664 3947 2646 4019 Dl -2376 4379 2376 4019 Dl -2376 4019 2916 4019 Dl -2916 4019 2916 4379 Dl -2916 4379 2376 4379 Dl -(trap\(\)) 2502 4221 w -(Handling) 720 4629 w -(page) 1274 4629 w -(faults) 1609 4629 w -(requires) 1983 4629 w -(the) 2497 4629 w -(handling) 2743 4629 w -(process) 3284 4629 w -(to) 3770 4629 w -(get) 3953 4629 w -(access) 4200 4629 w -(to) 4623 4629 w -(the) 4807 4629 w +(.) 3265 4890 w +(.) 3229 4890 w +(.) 3193 4890 w +(.) 3157 4890 w +(.) 3121 4890 w +(.) 3085 4890 w +(.) 3049 4890 w +(.) 3013 4890 w +(.) 2977 4890 w +(.) 2941 4890 w +(.) 2905 4890 w +2988 4869 2916 4887 Dl +2988 4905 2916 4887 Dl +2376 5067 2376 4707 Dl +2376 4707 2916 4707 Dl +2916 4707 2916 5067 Dl +2916 5067 2376 5067 Dl +11 /LucidaSansUnicode00 f +(runacore) 2410 4909 w +(The) 720 5281 w +(handling) 978 5281 w +(process,) 1503 5281 w +(running) 2009 5281 w 11 /LucidaSans-Italic f -(faulting) 5054 4629 w -(address) 720 4759 w -11 /LucidaSansUnicode00 f -(,) 1140 4759 w -11 /LucidaSans-Italic f -(cr2) 1216 4759 w -11 /LucidaSansUnicode00 f -(register) 1433 4759 w -(as) 1884 4759 w -(found) 2041 4759 w -(in) 2394 4759 w -(the) 2534 4759 w -(AC.) 2745 4759 w -(We) 2972 4759 w -(have) 3169 4759 w -(virtualized) 3457 4759 w -(the) 4059 4759 w -(register.) 4270 4759 w -(The) 4756 4759 w -(TC) 4995 4759 w -(saves) 5180 4759 w -(the) 720 4889 w -(hardware) 929 4889 w -(register) 1463 4889 w -(into) 1912 4889 w -(a) 2159 4889 w -(software) 2259 4889 w -(copy,) 2756 4889 w -(kept) 3079 4889 w -(in) 3354 4889 w -(the) 3493 4889 w -11 /LucidaSans-Italic f -(Mach) 3703 4889 w -11 /LucidaSansUnicode00 f -(structure.) 4023 4889 w -(The) 4579 4889 w -(AC) 4817 4889 w -(does) 5008 4889 w -(the) 5301 4889 w -(same.) 720 5019 w -(The) 1077 5019 w -(function) 1317 5019 w -11 /LucidaSans-Italic f -(runacore) 1799 5019 w -11 /LucidaSansUnicode00 f -(updates) 2325 5019 w -(the) 2792 5019 w -(TC) 3004 5019 w -(software) 3190 5019 w -(cr2) 3689 5019 w -(with) 3900 5019 w -(the) 4167 5019 w -(one) 4379 5019 w -(found) 4616 5019 w -(in) 4969 5019 w -(the) 5109 5019 w -(AC) 5320 5019 w -(before) 720 5149 w -(calling) 1101 5149 w -11 /LucidaSans-Italic f -(trap) 1485 5149 w -11 /LucidaSansUnicode00 f -(, so that) 1714 5149 w -(trap handling code) 2188 5149 w -(does not) 3229 5149 w -(need to) 3729 5149 w -(know) 4169 5149 w -(which) 4489 5149 w -(core) 4834 5149 w -(caused) 5100 5149 w -(the) 720 5279 w -(fault.) 926 5279 w -(Floating) 970 5445 w -(point) 1441 5445 w -(traps) 1762 5445 w -(are) 2078 5445 w -(handled) 2290 5445 w -(directly) 2763 5445 w -(in) 3201 5445 w -(the) 3345 5445 w -(AC,) 3560 5445 w -(instead) 3791 5445 w -(of) 4224 5445 w -(dispatching) 4376 5445 w -(the) 5040 5445 w -(pro\255) 5255 5445 w -(cess) 720 5575 w -(to) 988 5575 w -(the) 1133 5575 w -(TC;) 1341 5575 w -(for) 1558 5575 w -(efficiency.) 1748 5575 w -(Only) 2327 5575 w -(when) 2607 5575 w -(they) 2927 5575 w -(cause) 3192 5575 w -(an) 3532 5575 w -(event) 3698 5575 w -(or) 4025 5575 w -11 /LucidaSans-Italic f -(note) 4174 5575 w -11 /LucidaSansUnicode00 f -(to) 4442 5575 w -(be) 4587 5575 w -(posted) 4755 5575 w -(to) 5156 5575 w -(the) 5301 5575 w -(process, is the) 720 5705 w -(process transferred to the) 1530 5705 w -(TC) 2955 5705 w -(\(usually to be) 3135 5705 w -(killed\).) 3889 5705 w -(When) 970 5871 w -(an) 1304 5871 w -(AP) 1474 5871 w -(makes) 1652 5871 w -(a) 2038 5871 w -(system) 2140 5871 w -(call,) 2555 5871 w -(the) 2812 5871 w -(kernel) 3024 5871 w -(handler) 3398 5871 w -(in) 3844 5871 w -(the) 3985 5871 w -(AP) 4198 5871 w -(returns) 4377 5871 w -(control) 4804 5871 w -(back) 5222 5871 w -(to) 720 6001 w -(the) 867 6001 w -(TC) 1077 6001 w -(in) 1261 6001 w -(the) 1400 6001 w -(same) 1610 6001 w -(way) 1930 6001 w -(it) 2171 6001 w -(is) 2282 6001 w -(done) 2408 6001 w -(for) 2712 6001 w -(faults,) 2903 6001 w -(by) 3275 6001 w -(completing) 3439 6001 w -(the) 4074 6001 w -(ICC.) 4283 6001 w -(The) 4575 6001 w -(handler) 4812 6001 w -(pro\255) 5255 6001 w -(cess) 720 6131 w -(in) 989 6131 w -(the) 1128 6131 w -(TC) 1338 6131 w -(serves) 1522 6131 w -(the) 1899 6131 w -(system) 2109 6131 w -(call) 2522 6131 w -(and) 2742 6131 w -(then) 2979 6131 w -(transfers) 3257 6131 w -(control) 3771 6131 w -(back) 4186 6131 w -(to) 4475 6131 w -(the) 4622 6131 w -(AC,) 4832 6131 w -(by) 5058 6131 w -(issu\255) 5224 6131 w -(ing) 720 6261 w -(a) 939 6261 w -(new) 1051 6261 w -(ICC) 1317 6261 w -(to) 1552 6261 w -(let) 1711 6261 w -(the) 1897 6261 w -(process) 2119 6261 w -(continue) 2581 6261 w -(its) 3094 6261 w -(execution) 3274 6261 w -(after) 3848 6261 w -(returning) 4149 6261 w -(to) 4697 6261 w -(user) 4856 6261 w -(mode.) 5137 6261 w -(Like) 720 6391 w -(in) 984 6391 w -(traps,) 1132 6391 w -(the) 1487 6391 w -(user) 1706 6391 w -(context) 1985 6391 w -(is) 2435 6391 w -(kept) 2571 6391 w -(in) 2855 6391 w -(the) 3003 6391 w -(the) 3222 6391 w -(handler) 3441 6391 w -(process) 3894 6391 w -(kernel) 4353 6391 w -(stack,) 4734 6391 w -(as) 5096 6391 w -(it) 5262 6391 w -(is) 5384 6391 w -(done) 720 6521 w -(for) 1036 6521 w -(all) 1239 6521 w -(other) 1413 6521 w -(processes.) 1745 6521 w -(In) 2358 6521 w -(particular,) 2507 6521 w -(it) 3101 6521 w -(is) 3223 6521 w -(kept) 3360 6521 w -(within) 3645 6521 w -(the) 4020 6521 w -11 /LucidaSans-Italic f -(Ureg) 4240 6521 w -11 /LucidaSansUnicode00 f -(data) 4543 6521 w -(structure) 4824 6521 w -(as) 5355 6521 w -(found in that) 720 6651 w -(stack.) 1449 6651 w -(The) 970 6817 w -(handler) 1231 6817 w -(process,) 1698 6817 w -(that) 2206 6817 w -(is,) 2479 6817 w -(the) 2664 6817 w -(original) 2898 6817 w -(time-sharing) 3366 6817 w -(process) 4128 6817 w -(when) 4602 6817 w -(executing) 4948 6817 w -11 /LucidaSans-Italic f -(runacore) 720 6947 w -11 /LucidaSansUnicode00 f -(,) 1205 6947 w -(behaves) 1291 6947 w -(like) 1777 6947 w -(the) 2018 6947 w -(red) 2240 6947 w -(line) 2467 6947 w -(separating) 2712 6947 w -(the) 3326 6947 w -(user) 3548 6947 w -(code) 3830 6947 w -(\(now) 4135 6947 w -(in) 4442 6947 w -(the) 4593 6947 w -(AC\)) 4815 6947 w -(and) 5053 6947 w -(the) 5301 6947 w -(kernel) 720 7077 w -(code) 1095 7077 w -(\(run) 1391 7077 w -(in) 1650 7077 w -(the) 1792 7077 w -(TC\).) 2005 7077 w -(It) 2264 7077 w -(is) 2380 7077 w -(feasible) 2511 7077 w -(to) 2969 7077 w -(bring) 3120 7077 w -(the) 3445 7077 w -(process) 3659 7077 w -(back) 4113 7077 w -(to) 4406 7077 w -(the) 4557 7077 w -(TC,) 4771 7077 w -(as) 4994 7077 w -(it) 5154 7077 w -(was) 5270 7077 w -(before) 720 7207 w -(calling) 1110 7207 w -11 /LucidaSans-Italic f -(execac) 1503 7207 w -11 /LucidaSansUnicode00 f -(.) 1855 7207 w -(To) 1969 7207 w -(do) 2149 7207 w -(so,) 2329 7207 w -11 /LucidaSans-Italic f -(runacore) 2531 7207 w -11 /LucidaSansUnicode00 f -(returns) 3060 7207 w -(and,) 3489 7207 w -(only) 3766 7207 w -(this) 4034 7207 w -(case,) 4275 7207 w -(both) 4589 7207 w -11 /LucidaSans-Italic f -(execac) 4878 7207 w -11 /LucidaSansUnicode00 f -(and) 5274 7207 w +(runacore) 2486 5281 w +11 /LucidaSansUnicode00 f +(,) 2971 5281 w +(handles) 3066 5281 w +(the) 3542 5281 w +(fault) 3773 5281 w +(and) 4076 5281 w +(issues) 4334 5281 w +(a) 4724 5281 w +(new) 4845 5281 w +(ICC) 5120 5281 w +(to) 5364 5281 w +(make) 720 5411 w +(the) 1056 5411 w +(AP) 1274 5411 w +(return) 1458 5411 w +(from) 1834 5411 w +(the) 2136 5411 w +(trap,) 2354 5411 w +(so) 2652 5411 w +(that) 2822 5411 w +(the) 3079 5411 w +(process) 3296 5411 w +(continues) 3753 5411 w +(execution) 4317 5411 w +(in) 4886 5411 w +(its) 5032 5411 w +(core.) 5207 5411 w +(The) 720 5541 w +(trap might) 954 5541 w +(kill) 1551 5541 w +(the) 1746 5541 w +(process, in which case) 1952 5541 w +(the) 3182 5541 w +(AC) 3388 5541 w +(is released and becomes idle.) 3575 5541 w cleartomark showpage saveobj restore @@ -5150,594 +4959,550 @@ /saveobj save def mark 9 pagesetup +2376 1930 2376 1570 Dl +2376 1570 2916 1570 Dl +2916 1570 2916 1930 Dl +2916 1930 2376 1930 Dl +11 /LucidaSansUnicode00 f +(runacore) 2410 1772 w +8 /LucidaSansUnicode00 f +(.) 2905 1753 w +(.) 2941 1753 w +(.) 2977 1753 w +(.) 3013 1753 w +(.) 3049 1753 w +(.) 3085 1753 w +(.) 3121 1753 w +(.) 3157 1753 w +(.) 3193 1753 w +(.) 3229 1753 w +(.) 3265 1753 w +3204 1768 3276 1750 Dl +3204 1732 3276 1750 Dl +3276 1930 3276 1570 Dl +3276 1570 3816 1570 Dl +3816 1570 3816 1930 Dl +3816 1930 3276 1930 Dl +11 /LucidaSansUnicode00 f +(actrapret) 3306 1772 w +3546 1570 3546 1210 Dl +3564 1282 3546 1210 Dl +3528 1282 3546 1210 Dl +3276 1210 3276 850 Dl +3276 850 3816 850 Dl +3816 850 3816 1210 Dl +3816 1210 3276 1210 Dl +(user code) 3286 1052 w +2664 2002 2646 1930 Dl +2628 2002 2646 1930 Dl +2646 1930 2646 2290 Dl +2628 2218 2646 2290 Dl +2664 2218 2646 2290 Dl +2376 2650 2376 2290 Dl +2376 2290 2916 2290 Dl +2916 2290 2916 2650 Dl +2916 2650 2376 2650 Dl +(trap\(\)) 2502 2492 w +(Handling) 720 2900 w +(page) 1274 2900 w +(faults) 1609 2900 w +(requires) 1983 2900 w +(the) 2497 2900 w +(handling) 2743 2900 w +(process) 3284 2900 w +(to) 3770 2900 w +(get) 3953 2900 w +(access) 4200 2900 w +(to) 4623 2900 w +(the) 4807 2900 w 11 /LucidaSans-Italic f -(syscall) 720 850 w -11 /LucidaSansUnicode00 f -(are) 1115 850 w -(careful) 1323 850 w -(not) 1728 850 w -(do) 1944 850 w -(anything) 2120 850 w -(but) 2623 850 w -(returning) 2841 850 w -(to) 3378 850 w -(the) 3526 850 w -(caller.) 3738 850 w -(The) 4102 850 w -(reason) 4342 850 w -(is) 4742 850 w -(that) 4871 850 w -(calling) 5123 850 w +(faulting) 5054 2900 w +(address) 720 3030 w +11 /LucidaSansUnicode00 f +(,) 1140 3030 w 11 /LucidaSans-Italic f -(runacore) 720 980 w -11 /LucidaSansUnicode00 f -(was) 1260 980 w -(like) 1517 980 w -(returning) 1762 980 w -(from) 2314 980 w +(cr2) 1216 3030 w +11 /LucidaSansUnicode00 f +(register) 1433 3030 w +(as) 1884 3030 w +(found) 2041 3030 w +(in) 2394 3030 w +(the) 2534 3030 w +(AC.) 2745 3030 w +(We) 2972 3030 w +(have) 3169 3030 w +(virtualized) 3457 3030 w +(the) 4059 3030 w +(register.) 4270 3030 w +(The) 4756 3030 w +(TC) 4995 3030 w +(saves) 5180 3030 w +(the) 720 3160 w +(hardware) 929 3160 w +(register) 1463 3160 w +(into) 1912 3160 w +(a) 2159 3160 w +(software) 2259 3160 w +(copy,) 2756 3160 w +(kept) 3079 3160 w +(in) 3354 3160 w +(the) 3493 3160 w 11 /LucidaSans-Italic f -(exec) 2624 980 w -11 /LucidaSansUnicode00 f -(or) 2909 980 w +(Mach) 3703 3160 w +11 /LucidaSansUnicode00 f +(structure.) 4023 3160 w +(The) 4579 3160 w +(AC) 4817 3160 w +(does) 5008 3160 w +(the) 5301 3160 w +(same.) 720 3290 w +(The) 1077 3290 w +(function) 1317 3290 w 11 /LucidaSans-Italic f -(rfork) 3076 980 w -11 /LucidaSansUnicode00 f -(to) 3406 980 w -(user) 3569 980 w -(code) 3855 980 w -(\(only) 4163 980 w -(that) 4477 980 w -(in) 4742 980 w -(a) 4896 980 w -(different) 5011 980 w -(core\).) 720 1110 w -(All) 1082 1110 w -(book-keeping) 1283 1110 w -(to) 2100 1110 w -(be) 2269 1110 w -(done) 2461 1110 w -(while) 2788 1110 w -(returning,) 3129 1110 w -(was) 3723 1110 w -(already) 3987 1110 w -(done) 4436 1110 w -(by) 4764 1110 w +(runacore) 1799 3290 w +11 /LucidaSansUnicode00 f +(updates) 2325 3290 w +(the) 2792 3290 w +(TC) 3004 3290 w +(software) 3190 3290 w +(cr2) 3689 3290 w +(with) 3900 3290 w +(the) 4167 3290 w +(one) 4379 3290 w +(found) 4616 3290 w +(in) 4969 3290 w +(the) 5109 3290 w +(AC) 5320 3290 w +(before) 720 3420 w +(calling) 1101 3420 w 11 /LucidaSans-Italic f -(runacore) 4952 1110 w -11 /LucidaSansUnicode00 f -(.) 5437 1110 w -(Also,) 720 1240 w -(because) 1027 1240 w -(the) 1502 1240 w +(trap) 1485 3420 w +11 /LucidaSansUnicode00 f +(, so that) 1714 3420 w +(trap handling code) 2188 3420 w +(does not) 3229 3420 w +(need to) 3729 3420 w +(know) 4169 3420 w +(which) 4489 3420 w +(core) 4834 3420 w +(caused) 5100 3420 w +(the) 720 3550 w +(fault.) 926 3550 w +(Floating) 970 3716 w +(point) 1441 3716 w +(traps) 1762 3716 w +(are) 2078 3716 w +(handled) 2290 3716 w +(directly) 2763 3716 w +(in) 3201 3716 w +(the) 3345 3716 w +(AC,) 3560 3716 w +(instead) 3791 3716 w +(of) 4224 3716 w +(dispatching) 4376 3716 w +(the) 5040 3716 w +(pro\255) 5255 3716 w +(cess) 720 3846 w +(to) 988 3846 w +(the) 1133 3846 w +(TC;) 1341 3846 w +(for) 1558 3846 w +(efficiency.) 1748 3846 w +(Only) 2327 3846 w +(when) 2607 3846 w +(they) 2927 3846 w +(cause) 3192 3846 w +(an) 3532 3846 w +(event) 3698 3846 w +(or) 4025 3846 w 11 /LucidaSans-Italic f -(Ureg) 1714 1240 w -11 /LucidaSansUnicode00 f -(in) 2008 1240 w -(the) 2148 1240 w -(bottom) 2359 1240 w -(of) 2786 1240 w -(the) 2934 1240 w -(kernel) 3145 1240 w -(stack) 3518 1240 w -(for) 3836 1240 w -(the) 4029 1240 w -(process) 4240 1240 w -(has) 4691 1240 w -(been) 4916 1240 w -(used) 5217 1240 w -(as) 720 1370 w -(the) 887 1370 w -(place) 1108 1370 w -(to) 1438 1370 w -(keep) 1597 1370 w -(the) 1905 1370 w -(user) 2127 1370 w -(context,) 2409 1370 w -(the) 2897 1370 w -(code) 3119 1370 w -(executed) 3424 1370 w -(after) 3962 1370 w -(returning) 4263 1370 w -(from) 4811 1370 w +(note) 4174 3846 w +11 /LucidaSansUnicode00 f +(to) 4442 3846 w +(be) 4587 3846 w +(posted) 4755 3846 w +(to) 5156 3846 w +(the) 5301 3846 w +(process, is the) 720 3976 w +(process transferred to the) 1530 3976 w +(TC) 2955 3976 w +(\(usually to be) 3135 3976 w +(killed\).) 3889 3976 w +(When) 970 4142 w +(an) 1304 4142 w +(AP) 1474 4142 w +(makes) 1652 4142 w +(a) 2038 4142 w +(system) 2140 4142 w +(call,) 2555 4142 w +(the) 2812 4142 w +(kernel) 3024 4142 w +(handler) 3398 4142 w +(in) 3844 4142 w +(the) 3985 4142 w +(AP) 4198 4142 w +(returns) 4377 4142 w +(control) 4804 4142 w +(back) 5222 4142 w +(to) 720 4272 w +(the) 867 4272 w +(TC) 1077 4272 w +(in) 1261 4272 w +(the) 1400 4272 w +(same) 1610 4272 w +(way) 1930 4272 w +(it) 2171 4272 w +(is) 2282 4272 w +(done) 2408 4272 w +(for) 2712 4272 w +(faults,) 2903 4272 w +(by) 3275 4272 w +(completing) 3439 4272 w +(the) 4074 4272 w +(ICC.) 4283 4272 w +(The) 4575 4272 w +(handler) 4812 4272 w +(pro\255) 5255 4272 w +(cess) 720 4402 w +(in) 989 4402 w +(the) 1128 4402 w +(TC) 1338 4402 w +(serves) 1522 4402 w +(the) 1899 4402 w +(system) 2109 4402 w +(call) 2522 4402 w +(and) 2742 4402 w +(then) 2979 4402 w +(transfers) 3257 4402 w +(control) 3771 4402 w +(back) 4186 4402 w +(to) 4475 4402 w +(the) 4622 4402 w +(AC,) 4832 4402 w +(by) 5058 4402 w +(issu\255) 5224 4402 w +(ing) 720 4532 w +(a) 939 4532 w +(new) 1051 4532 w +(ICC) 1317 4532 w +(to) 1552 4532 w +(let) 1711 4532 w +(the) 1897 4532 w +(process) 2119 4532 w +(continue) 2581 4532 w +(its) 3094 4532 w +(execution) 3274 4532 w +(after) 3848 4532 w +(returning) 4149 4532 w +(to) 4697 4532 w +(user) 4856 4532 w +(mode.) 5137 4532 w +(Like) 720 4662 w +(in) 984 4662 w +(traps,) 1132 4662 w +(the) 1487 4662 w +(user) 1706 4662 w +(context) 1985 4662 w +(is) 2435 4662 w +(kept) 2571 4662 w +(in) 2855 4662 w +(the) 3003 4662 w +(the) 3222 4662 w +(handler) 3441 4662 w +(process) 3894 4662 w +(kernel) 4353 4662 w +(stack,) 4734 4662 w +(as) 5096 4662 w +(it) 5262 4662 w +(is) 5384 4662 w +(done) 720 4792 w +(for) 1036 4792 w +(all) 1239 4792 w +(other) 1413 4792 w +(processes.) 1745 4792 w +(In) 2358 4792 w +(particular,) 2507 4792 w +(it) 3101 4792 w +(is) 3223 4792 w +(kept) 3360 4792 w +(within) 3645 4792 w +(the) 4020 4792 w 11 /LucidaSans-Italic f -(syscall) 5117 1370 w -11 /LucidaSansUnicode00 f -(would) 720 1500 w -(restore) 1082 1500 w -(the) 1500 1500 w -(user) 1711 1500 w -(context) 1982 1500 w -(as) 2424 1500 w -(it) 2581 1500 w -(was) 2694 1500 w -(when) 2936 1500 w -(the) 3259 1500 w -(process) 3470 1500 w -(left) 3921 1500 w -(the) 4137 1500 w -(AC) 4348 1500 w -(to) 4540 1500 w -(go) 4688 1500 w -(back) 4863 1500 w -(to) 5153 1500 w -(the) 5301 1500 w -(TC.) 720 1630 w -(Hardware) 970 1796 w -(interrupts) 1526 1796 w -(are) 2100 1796 w -(all) 2316 1796 w -(routed) 2489 1796 w -(to) 2889 1796 w -(BSP.) 3045 1796 w -(ACs) 3347 1796 w -(should) 3603 1796 w -(not) 4011 1796 w -(take) 4235 1796 w -(any) 4511 1796 w -(interrupts,) 4745 1796 w -(as) 5355 1796 w -(they) 720 1926 w -(cause) 986 1926 w -(jitter.) 1327 1926 w -(We) 1689 1926 w -(changed) 1884 1926 w -(the) 2374 1926 w -(round-robin) 2583 1926 w -(allocation) 3283 1926 w -(code) 3838 1926 w -(to) 4129 1926 w -(find) 4274 1926 w -(the) 4521 1926 w -(first) 4729 1926 w -(core) 4981 1926 w -(able) 5248 1926 w -(to) 720 2056 w -(take) 869 2056 w -(interrupts) 1138 2056 w -(and) 1706 2056 w -(route) 1945 2056 w -(all) 2269 2056 w -(to) 2435 2056 w -(that.) 2584 2056 w -(We) 2906 2056 w -(assume) 3104 2056 w -(that) 3550 2056 w -(first) 3802 2056 w -(core) 4058 2056 w -(is) 4329 2056 w -(the) 4458 2056 w -(BSP.) 4671 2056 w -(\(Note) 4932 2056 w -(that) 5261 2056 w -(is) 720 2186 w -(still) 868 2186 w -(feasible) 1121 2186 w -(to) 1596 2186 w -(route) 1764 2186 w -(interrupts) 2107 2186 w -(to) 2694 2186 w -(other) 2861 2186 w -(TCs) 3203 2186 w -(or) 3463 2186 w -(KCs,) 3634 2186 w -(and) 3932 2186 w -(we) 4189 2186 w -(might) 4395 2186 w -(do) 4765 2186 w -(so) 4960 2186 w -(in) 5142 2186 w -(the) 5301 2186 w -(future\).) 720 2316 w -(Also,) 1209 2316 w -(no) 1533 2316 w -(APIC) 1727 2316 w -(timer) 2031 2316 w -(interrupts) 2372 2316 w -(are) 2958 2316 w -(enabled) 3185 2316 w -(on) 3667 2316 w -(ACs.) 3861 2316 w -(User) 4198 2316 w -(code) 4496 2316 w -(in) 4809 2316 w -(ACs) 4968 2316 w -(runs) 5235 2316 w -(undisturbed, until) 720 2446 w -(it) 1713 2446 w -(faults or makes a) 1821 2446 w -(system call.) 2778 2446 w -(The) 970 2612 w -(AC) 1228 2612 w -(requires) 1439 2612 w -(a) 1937 2612 w -(few) 2057 2612 w -(new) 2304 2612 w -(assembler) 2578 2612 w -(routines) 3182 2612 w -(to) 3680 2612 w -(transfer) 3847 2612 w -(control) 4325 2612 w -(to/from) 4760 2612 w -(user) 5241 2612 w -(space,) 720 2742 w -(while) 1095 2742 w -(using) 1410 2742 w -(the) 1738 2742 w -(standard) 1945 2742 w +(Ureg) 4240 4792 w +11 /LucidaSansUnicode00 f +(data) 4543 4792 w +(structure) 4824 4792 w +(as) 5355 4792 w +(found in that) 720 4922 w +(stack.) 1449 4922 w +(The) 970 5088 w +(handler) 1231 5088 w +(process,) 1698 5088 w +(that) 2206 5088 w +(is,) 2479 5088 w +(the) 2664 5088 w +(original) 2898 5088 w +(time-sharing) 3366 5088 w +(process) 4128 5088 w +(when) 4602 5088 w +(executing) 4948 5088 w 11 /LucidaSans-Italic f -(Ureg) 2451 2742 w -11 /LucidaSansUnicode00 f -(space) 2741 2742 w -(in the) 3080 2742 w -(bottom of) 3421 2742 w -(the) 3986 2742 w -(process kernel) 4192 2742 w -(stack) 5006 2742 w -(for) 5319 2742 w -(saving) 720 2872 w -(and) 1121 2872 w -(restoring) 1378 2872 w -(process) 1921 2872 w -(context.) 2391 2872 w -(The) 2887 2872 w -(process) 3145 2872 w -(kernel) 3615 2872 w -(stack) 4008 2872 w -(is) 4346 2872 w -(not) 4494 2872 w -(used) 4730 2872 w -(\(but) 5045 2872 w -(for) 5319 2872 w -(keeping) 720 3002 w -(the) 1201 3002 w +(runacore) 720 5218 w +11 /LucidaSansUnicode00 f +(,) 1205 5218 w +(behaves) 1291 5218 w +(like) 1777 5218 w +(the) 2018 5218 w +(red) 2240 5218 w +(line) 2467 5218 w +(separating) 2712 5218 w +(the) 3326 5218 w +(user) 3548 5218 w +(code) 3830 5218 w +(\(now) 4135 5218 w +(in) 4442 5218 w +(the) 4593 5218 w +(AC\)) 4815 5218 w +(and) 5053 5218 w +(the) 5301 5218 w +(kernel) 720 5348 w +(code) 1095 5348 w +(\(run) 1391 5348 w +(in) 1650 5348 w +(the) 1792 5348 w +(TC\).) 2005 5348 w +(It) 2264 5348 w +(is) 2380 5348 w +(feasible) 2511 5348 w +(to) 2969 5348 w +(bring) 3120 5348 w +(the) 3445 5348 w +(process) 3659 5348 w +(back) 4113 5348 w +(to) 4406 5348 w +(the) 4557 5348 w +(TC,) 4771 5348 w +(as) 4994 5348 w +(it) 5154 5348 w +(was) 5270 5348 w +(before) 720 5478 w +(calling) 1110 5478 w 11 /LucidaSans-Italic f -(Ureg) 1428 3002 w -11 /LucidaSansUnicode00 f -(\)) 1682 3002 w -(while) 1774 3002 w -(in) 2109 3002 w -(the) 2264 3002 w -(ACs;) 2490 3002 w -(instead,) 2788 3002 w -(the) 3267 3002 w -(per-core) 3493 3002 w -(stack,) 4018 3002 w -(known) 4386 3002 w -(as) 4793 3002 w -(the) 4965 3002 w +(execac) 1503 5478 w +11 /LucidaSansUnicode00 f +(.) 1855 5478 w +(To) 1969 5478 w +(do) 2149 5478 w +(so,) 2329 5478 w 11 /LucidaSans-Italic f -(Mach) 5191 3002 w -11 /LucidaSansUnicode00 f -(stack, is used for the) 720 3132 w -(few) 1875 3132 w -(kernel) 2098 3132 w -(routines executed in the) 2466 3132 w -(AC.) 3803 3132 w -(Because) 970 3298 w -(the) 1441 3298 w -(instructions) 1654 3298 w -(used) 2326 3298 w -(to) 2623 3298 w -(enter) 2773 3298 w -(the) 3093 3298 w -(kernel,) 3306 3298 w -(and) 3716 3298 w -(the) 3956 3298 w -(sequence,) 4170 3298 w -(is) 4751 3298 w -(exactly) 4882 3298 w -(the) 5301 3298 w -(same) 720 3428 w -(in) 1040 3428 w -(both) 1179 3428 w -(the) 1463 3428 w -(TC) 1673 3428 w -(and) 1857 3428 w -(the) 2094 3428 w -(AC,) 2304 3428 w -(no) 2530 3428 w -(change) 2704 3428 w -(is) 3126 3428 w -(needed) 3253 3428 w -(in) 3684 3428 w -(the) 3823 3428 w -(C) 4032 3428 w -(library) 4146 3428 w -(\(other) 4525 3428 w -(than) 4882 3428 w -(a) 5158 3428 w -(new) 5257 3428 w -(system) 720 3558 w -(for) 1143 3558 w -(using) 1345 3558 w -(the) 1686 3558 w -(new) 1906 3558 w -(service\).) 2170 3558 w -(All) 2660 3558 w -(system) 2849 3558 w -(calls) 3272 3558 w -(may) 3558 3558 w -(proceed,) 3827 3558 w -(transparently) 4342 3558 w -(for) 5098 3558 w -(the) 5301 3558 w -(user, in both kinds of) 720 3688 w -(cores.) 1903 3688 w -11 /LucidaSans-Demi f -(7.) 720 3948 w -(Queue) 888 3948 w -(based) 1289 3948 w -(system) 1663 3948 w -(calls?) 2105 3948 w -11 /LucidaSansUnicode00 f -(As) 720 4114 w -(an) 894 4114 w -(experiment,) 1065 4114 w -(we) 1752 4114 w -(implemented) 1941 4114 w -(a) 2685 4114 w -(small) 2789 4114 w -(thread) 3115 4114 w -(library) 3504 4114 w -(supporting) 3888 4114 w -(queue-based) 4514 4114 w -(sys\255) 5267 4114 w -(tem) 720 4244 w -(calls) 965 4244 w -(similar) 1242 4244 w -(to) 1642 4244 w -(those) 1790 4244 w -(in) 2124 4244 w -([5].) 2264 4244 w -(Threads) 2480 4244 w -(are) 2950 4244 w -(cooperatively) 3158 4244 w -(scheduled) 3905 4244 w -(within) 4486 4244 w -(the) 4851 4244 w -(process) 5061 4244 w -(and not) 720 4374 w -(known to the) 1164 4374 w -(kernel.) 1900 4374 w -(Each) 970 4540 w -(process) 1288 4540 w -(has) 1773 4540 w -(been) 2032 4540 w -(provided) 2367 4540 w -(with) 2911 4540 w -(two) 3211 4540 w -(queues:) 3478 4540 w -(one) 3972 4540 w -(to) 4243 4540 w -(record) 4425 4540 w -(system) 4843 4540 w -(call) 5291 4540 w -(requests,) 720 4670 w -(and) 1255 4670 w -(another) 1494 4670 w -(to) 1947 4670 w -(record) 2096 4670 w -(system) 2481 4670 w -(call) 2896 4670 w -(replies.) 3118 4670 w -(When) 3551 4670 w -(a) 3884 4670 w -(thread) 3985 4670 w -(issues) 4371 4670 w -(a) 4741 4670 w -(system) 4842 4670 w -(call,) 5256 4670 w -(it) 720 4800 w -(fills) 837 4800 w -(up) 1074 4800 w -(an) 1255 4800 w -(slot) 1428 4800 w -(in) 1668 4800 w -(the) 1812 4800 w -(system) 2027 4800 w -(call) 2445 4800 w -(queue,) 2670 4800 w -(instead) 3078 4800 w -(of) 3511 4800 w -(making) 3663 4800 w -(an) 4102 4800 w -(actual) 4276 4800 w -(system) 4640 4800 w -(call.) 5059 4800 w -(At) 5355 4800 w -(that) 720 4930 w -(point,) 967 4930 w -(the) 1315 4930 w -(thread) 1522 4930 w -(library) 1904 4930 w -(marks) 2281 4930 w -(the) 2645 4930 w -(thread as blocked and proceeds to execute) 2852 4930 w -(other) 5189 4930 w -(threads.) 720 5060 w -(When) 1214 5060 w -(all) 1564 5060 w -(the) 1746 5060 w -(threads) 1974 5060 w -(are) 2433 5060 w -(blocked,) 2658 5060 w -(the) 3169 5060 w -(process) 3397 5060 w -(waits) 3865 5060 w -(for) 4197 5060 w -(replies) 4407 5060 w -(in) 4822 5060 w -(the) 4979 5060 w -(reply) 5207 5060 w -(queue.) 720 5190 w -(Before) 970 5356 w -(using) 1352 5356 w -(the) 1685 5356 w -(queue) 1897 5356 w -(mechanism,) 2268 5356 w -(the) 2952 5356 w -(process) 3165 5356 w -(issues) 3618 5356 w -(a) 3990 5356 w -(real) 4093 5356 w -(system) 4335 5356 w -(call) 4751 5356 w -(to) 4974 5356 w -(let) 5124 5356 w -(the) 5301 5356 w -(kernel) 720 5486 w -(know.) 1104 5486 w -(In) 1474 5486 w -(response) 1625 5486 w -(to) 2161 5486 w -(this) 2320 5486 w -(call,) 2568 5486 w -(the) 2835 5486 w -(kernel) 3056 5486 w -(creates) 3439 5486 w -(a) 3872 5486 w -(\(kernel\)) 3983 5486 w -(process) 4438 5486 w -(sharing) 4899 5486 w -(all) 5347 5486 w -(segments) 720 5616 w -(with) 1281 5616 w -(the) 1553 5616 w -(caller.) 1770 5616 w -(This) 2139 5616 w -(process) 2410 5616 w -(is) 2867 5616 w -(responsible) 3001 5616 w -(for) 3665 5616 w -(executing) 3864 5616 w -(the) 4435 5616 w -(queued) 4653 5616 w -(system) 5098 5616 w -(calls and placing replies for them in the) 720 5746 w -(reply queue.) 2876 5746 w -(With) 970 5912 w -(this) 1245 5912 w -(implementation,) 1481 5912 w -(we) 2394 5912 w -(made) 2580 5912 w -(several) 2913 5912 w -(performance) 3327 5912 w -(measurements) 4044 5912 w -(before) 4869 5912 w -(pro\255) 5255 5912 w -(ceeding) 720 6042 w -(further.) 1192 6042 w -(In) 1652 6042 w -(particular,) 1807 6042 w -(we) 2407 6042 w -(measured) 2609 6042 w -(how) 3189 6042 w -(long) 3464 6042 w -(it) 3754 6042 w -(takes) 3882 6042 w -(for) 4221 6042 w -(a) 4428 6042 w -(program) 4543 6042 w -(with) 5054 6042 w -(50) 5334 6042 w -(threads to execute) 720 6172 w -(5000 system calls in each thread.) 1753 6172 w -(For) 3579 6172 w -(the) 3786 6172 w -(experiment,) 3993 6172 w -(the) 4674 6172 w -(system) 4881 6172 w -(call) 5291 6172 w -(used does not) 720 6302 w -(block) 1510 6302 w -(and does nothing.) 1833 6302 w -(It) 970 6468 w -(takes) 1102 6468 w -(this) 1445 6468 w -(program) 1702 6468 w -(0.17) 2219 6468 w -(seconds) 2521 6468 w -(to) 3015 6468 w -(complete) 3183 6468 w -(when) 3734 6468 w -(run) 4077 6468 w -(on) 4318 6468 w -(the) 4513 6468 w -(TC) 4744 6468 w -(using) 4949 6468 w -(the) 5301 6468 w -(queue) 720 6598 w -(based) 1094 6598 w -(mechanism.) 1456 6598 w -(However,) 2143 6598 w -(it) 2682 6598 w -(takes) 2800 6598 w -(only) 3129 6598 w -(0.06) 3398 6598 w -(seconds) 3685 6598 w -(to) 4164 6598 w -(complete) 4317 6598 w -(when) 4853 6598 w -(using) 5180 6598 w -(the) 720 6728 w -(standard) 941 6728 w -(system) 1461 6728 w -(call) 1885 6728 w -(mechanism.) 2116 6728 w -(Therefore,) 2808 6728 w -(at) 3414 6728 w -(least) 3567 6728 w -(for) 3870 6728 w -(this) 4074 6728 w -(program,) 4322 6728 w -(the) 4865 6728 w -(mecha\255) 5087 6728 w -(nism) 720 6858 w -(is) 1014 6858 w -(more) 1138 6858 w -(an) 1450 6858 w -(overhead) 1615 6858 w -(than) 2142 6858 w -(a) 2416 6858 w -(benefit.) 2513 6858 w -(It) 2959 6858 w -(is likely that) 3068 6858 w -(the) 3751 6858 w -(total) 3957 6858 w -(number of) 4234 6858 w -(system calls) 4826 6858 w -(per) 720 6988 w -(second) 943 6988 w -(that) 1368 6988 w -(could) 1626 6988 w -(be) 1965 6988 w -(performed) 2143 6988 w -(in) 2752 6988 w -(the) 2899 6988 w -(machine) 3117 6988 w -(might) 3613 6988 w -(increase) 3971 6988 w -(due) 4460 6988 w -(to) 4707 6988 w -(the) 4863 6988 w -(smaller) 5082 6988 w -(number) 720 7118 w -(of) 1178 7118 w -(domain) 1330 7118 w -(crossings.) 1773 7118 w -(However,) 2356 7118 w -(for) 2894 7118 w -(a) 3091 7118 w -(single) 3196 7118 w -(program,) 3558 7118 w -(that) 4094 7118 w -(does) 4349 7118 w -(not) 4646 7118 w -(seem) 4865 7118 w -(to) 5190 7118 w -(be) 5341 7118 w -(the) 720 7248 w -(case.) 926 7248 w +(runacore) 2531 5478 w +11 /LucidaSansUnicode00 f +(returns) 3060 5478 w +(and,) 3489 5478 w +(only) 3766 5478 w +(this) 4034 5478 w +(case,) 4275 5478 w +(both) 4589 5478 w +11 /LucidaSans-Italic f +(execac) 4878 5478 w +11 /LucidaSansUnicode00 f +(and) 5274 5478 w +11 /LucidaSans-Italic f +(syscall) 720 5608 w +11 /LucidaSansUnicode00 f +(are) 1115 5608 w +(careful) 1323 5608 w +(not) 1728 5608 w +(do) 1944 5608 w +(anything) 2120 5608 w +(but) 2623 5608 w +(returning) 2841 5608 w +(to) 3378 5608 w +(the) 3526 5608 w +(caller.) 3738 5608 w +(The) 4102 5608 w +(reason) 4342 5608 w +(is) 4742 5608 w +(that) 4871 5608 w +(calling) 5123 5608 w +11 /LucidaSans-Italic f +(runacore) 720 5738 w +11 /LucidaSansUnicode00 f +(was) 1260 5738 w +(like) 1517 5738 w +(returning) 1762 5738 w +(from) 2314 5738 w +11 /LucidaSans-Italic f +(exec) 2624 5738 w +11 /LucidaSansUnicode00 f +(or) 2909 5738 w +11 /LucidaSans-Italic f +(rfork) 3076 5738 w +11 /LucidaSansUnicode00 f +(to) 3406 5738 w +(user) 3569 5738 w +(code) 3855 5738 w +(\(only) 4163 5738 w +(that) 4477 5738 w +(in) 4742 5738 w +(a) 4896 5738 w +(different) 5011 5738 w +(core\).) 720 5868 w +(All) 1082 5868 w +(book-keeping) 1283 5868 w +(to) 2100 5868 w +(be) 2269 5868 w +(done) 2461 5868 w +(while) 2788 5868 w +(returning,) 3129 5868 w +(was) 3723 5868 w +(already) 3987 5868 w +(done) 4436 5868 w +(by) 4764 5868 w +11 /LucidaSans-Italic f +(runacore) 4952 5868 w +11 /LucidaSansUnicode00 f +(.) 5437 5868 w +(Also,) 720 5998 w +(because) 1027 5998 w +(the) 1502 5998 w +11 /LucidaSans-Italic f +(Ureg) 1714 5998 w +11 /LucidaSansUnicode00 f +(in) 2008 5998 w +(the) 2148 5998 w +(bottom) 2359 5998 w +(of) 2786 5998 w +(the) 2934 5998 w +(kernel) 3145 5998 w +(stack) 3518 5998 w +(for) 3836 5998 w +(the) 4029 5998 w +(process) 4240 5998 w +(has) 4691 5998 w +(been) 4916 5998 w +(used) 5217 5998 w +(as) 720 6128 w +(the) 887 6128 w +(place) 1108 6128 w +(to) 1438 6128 w +(keep) 1597 6128 w +(the) 1905 6128 w +(user) 2127 6128 w +(context,) 2409 6128 w +(the) 2897 6128 w +(code) 3119 6128 w +(executed) 3424 6128 w +(after) 3962 6128 w +(returning) 4263 6128 w +(from) 4811 6128 w +11 /LucidaSans-Italic f +(syscall) 5117 6128 w +11 /LucidaSansUnicode00 f +(would) 720 6258 w +(restore) 1082 6258 w +(the) 1500 6258 w +(user) 1711 6258 w +(context) 1982 6258 w +(as) 2424 6258 w +(it) 2581 6258 w +(was) 2694 6258 w +(when) 2936 6258 w +(the) 3259 6258 w +(process) 3470 6258 w +(left) 3921 6258 w +(the) 4137 6258 w +(AC) 4348 6258 w +(to) 4540 6258 w +(go) 4688 6258 w +(back) 4863 6258 w +(to) 5153 6258 w +(the) 5301 6258 w +(TC.) 720 6388 w +(Hardware) 970 6554 w +(interrupts) 1526 6554 w +(are) 2100 6554 w +(all) 2316 6554 w +(routed) 2489 6554 w +(to) 2889 6554 w +(BSP.) 3045 6554 w +(ACs) 3347 6554 w +(should) 3603 6554 w +(not) 4011 6554 w +(take) 4235 6554 w +(any) 4511 6554 w +(interrupts,) 4745 6554 w +(as) 5355 6554 w +(they) 720 6684 w +(cause) 986 6684 w +(jitter.) 1327 6684 w +(We) 1689 6684 w +(changed) 1884 6684 w +(the) 2374 6684 w +(round-robin) 2583 6684 w +(allocation) 3283 6684 w +(code) 3838 6684 w +(to) 4129 6684 w +(find) 4274 6684 w +(the) 4521 6684 w +(first) 4729 6684 w +(core) 4981 6684 w +(able) 5248 6684 w +(to) 720 6814 w +(take) 869 6814 w +(interrupts) 1138 6814 w +(and) 1706 6814 w +(route) 1945 6814 w +(all) 2269 6814 w +(to) 2435 6814 w +(that.) 2584 6814 w +(We) 2906 6814 w +(assume) 3104 6814 w +(that) 3550 6814 w +(first) 3802 6814 w +(core) 4058 6814 w +(is) 4329 6814 w +(the) 4458 6814 w +(BSP.) 4671 6814 w +(\(Note) 4932 6814 w +(that) 5261 6814 w +(is) 720 6944 w +(still) 868 6944 w +(feasible) 1121 6944 w +(to) 1596 6944 w +(route) 1764 6944 w +(interrupts) 2107 6944 w +(to) 2694 6944 w +(other) 2861 6944 w +(TCs) 3203 6944 w +(or) 3463 6944 w +(KCs,) 3634 6944 w +(and) 3932 6944 w +(we) 4189 6944 w +(might) 4395 6944 w +(do) 4765 6944 w +(so) 4960 6944 w +(in) 5142 6944 w +(the) 5301 6944 w +(future\).) 720 7074 w +(Also,) 1209 7074 w +(no) 1533 7074 w +(APIC) 1727 7074 w +(timer) 2031 7074 w +(interrupts) 2372 7074 w +(are) 2958 7074 w +(enabled) 3185 7074 w +(on) 3667 7074 w +(ACs.) 3861 7074 w +(User) 4198 7074 w +(code) 4496 7074 w +(in) 4809 7074 w +(ACs) 4968 7074 w +(runs) 5235 7074 w +(undisturbed, until) 720 7204 w +(it) 1713 7204 w +(faults or makes a) 1821 7204 w +(system call.) 2778 7204 w cleartomark showpage saveobj restore @@ -5747,465 +5512,574 @@ mark 10 pagesetup 11 /LucidaSansUnicode00 f -(As) 970 850 w -(another) 1143 850 w -(experiment,) 1596 850 w -(running) 2282 850 w -(the) 2740 850 w -(same) 2953 850 w -(program) 3276 850 w -(on) 3775 850 w -(the) 3952 850 w -(AC) 4165 850 w -(takes) 4359 850 w -(240.3) 4685 850 w -(seconds) 5038 850 w -(when) 720 980 w -(using) 1045 980 w -(the) 1379 980 w -(standard) 1592 980 w -(system) 2104 980 w -(call) 2520 980 w -(mechanism,) 2742 980 w -(and) 3425 980 w -(0.17) 3664 980 w -(seconds) 3947 980 w -(when) 4422 980 w -(using) 4746 980 w -(queue-) 5079 980 w -(based) 720 1110 w -(system) 1083 1110 w -(calls.) 1503 1110 w -(The) 1821 1110 w -(AC) 2066 1110 w -(is) 2264 1110 w -(not) 2398 1110 w -(meant) 2620 1110 w -(to) 3000 1110 w -(perform) 3154 1110 w -(system) 3631 1110 w -(calls.) 4052 1110 w -(A) 4406 1110 w -(system) 4529 1110 w -(call) 4950 1110 w -(made) 5178 1110 w -(while) 720 1240 w -(running) 1039 1240 w -(on) 1496 1240 w -(it) 1671 1240 w -(implies) 1784 1240 w -(a) 2209 1240 w -(trip) 2309 1240 w -(to) 2535 1240 w -(the) 2682 1240 w -(TC) 2892 1240 w -(and) 3076 1240 w -(another) 3313 1240 w -(trip) 3764 1240 w -(back) 3990 1240 w -(to) 4279 1240 w -(the) 4426 1240 w -(AC.) 4636 1240 w -(As) 4862 1240 w -(a) 5033 1240 w -(result,) 5133 1240 w -(issuing) 720 1370 w -(system) 1142 1370 w -(calls) 1558 1370 w -(from) 1837 1370 w -(the) 2134 1370 w -(AC) 2347 1370 w -(is) 2541 1370 w -(utterly) 2671 1370 w -(expensive.) 3059 1370 w -(Looking) 3706 1370 w -(at) 4173 1370 w -(the) 4318 1370 w -(second) 4532 1370 w -(time,) 4953 1370 w -(it) 5268 1370 w -(is) 5384 1370 w -(similar) 720 1500 w -(to) 1121 1500 w -(one) 1270 1500 w -(for) 1508 1500 w -(running) 1701 1500 w -(in) 2158 1500 w -(the) 2298 1500 w -(TC.) 2509 1500 w -(Therefore,) 2729 1500 w -(we) 3325 1500 w -(may) 3512 1500 w -(conclude) 3772 1500 w -(that) 4290 1500 w -(queue) 4541 1500 w -(based) 4910 1500 w -(sys\255) 5267 1500 w -(tem calls may make) 720 1630 w -(system calls affordable) 1811 1630 w -(even for ACs.) 3075 1630 w -(However,) 970 1796 w -(a) 1509 1796 w -(more) 1615 1796 w -(simple) 1936 1796 w -(mechanism) 2334 1796 w -(is) 2986 1796 w -(to) 3119 1796 w -(keep) 3273 1796 w -(in) 3576 1796 w -(the) 3722 1796 w -(TC) 3939 1796 w -(those) 4130 1796 w -(processes) 4470 1796 w -(that) 5045 1796 w -(did) 5302 1796 w -(not) 720 1926 w -(consume) 943 1926 w -(all) 1469 1926 w -(its) 1641 1926 w -(quantum) 1816 1926 w -(at) 2339 1926 w -(user) 2487 1926 w -(level,) 2764 1926 w -(and) 3090 1926 w -(move) 3334 1926 w -(to) 3668 1926 w -(ACs) 3822 1926 w -(only) 4076 1926 w -(those) 4346 1926 w -(processes) 4686 1926 w -(that) 5261 1926 w -(do) 720 2056 w -(so.) 901 2056 w -(As) 1104 2056 w -(a) 1281 2056 w -(result,) 1387 2056 w -(we) 1771 2056 w -(have) 1963 2056 w -(decided) 2256 2056 w -(not) 2720 2056 w -(to) 2941 2056 w -(include) 3094 2056 w -(queue) 3526 2056 w -(based) 3900 2056 w -(system) 4262 2056 w -(calls) 4681 2056 w -(\(although) 4963 2056 w -(tubes can still) 720 2186 w -(be) 1499 2186 w -(used for IPC\).) 1665 2186 w +(The) 970 850 w +(AC) 1228 850 w +(requires) 1439 850 w +(a) 1937 850 w +(few) 2057 850 w +(new) 2304 850 w +(assembler) 2578 850 w +(routines) 3182 850 w +(to) 3680 850 w +(transfer) 3847 850 w +(control) 4325 850 w +(to/from) 4760 850 w +(user) 5241 850 w +(space,) 720 980 w +(while) 1095 980 w +(using) 1410 980 w +(the) 1738 980 w +(standard) 1945 980 w +11 /LucidaSans-Italic f +(Ureg) 2451 980 w +11 /LucidaSansUnicode00 f +(space) 2741 980 w +(in the) 3080 980 w +(bottom of) 3421 980 w +(the) 3986 980 w +(process kernel) 4192 980 w +(stack) 5006 980 w +(for) 5319 980 w +(saving) 720 1110 w +(and) 1121 1110 w +(restoring) 1378 1110 w +(process) 1921 1110 w +(context.) 2391 1110 w +(The) 2887 1110 w +(process) 3145 1110 w +(kernel) 3615 1110 w +(stack) 4008 1110 w +(is) 4346 1110 w +(not) 4494 1110 w +(used) 4730 1110 w +(\(but) 5045 1110 w +(for) 5319 1110 w +(keeping) 720 1240 w +(the) 1201 1240 w +11 /LucidaSans-Italic f +(Ureg) 1428 1240 w +11 /LucidaSansUnicode00 f +(\)) 1682 1240 w +(while) 1774 1240 w +(in) 2109 1240 w +(the) 2264 1240 w +(ACs;) 2490 1240 w +(instead,) 2788 1240 w +(the) 3267 1240 w +(per-core) 3493 1240 w +(stack,) 4018 1240 w +(known) 4386 1240 w +(as) 4793 1240 w +(the) 4965 1240 w +11 /LucidaSans-Italic f +(Mach) 5191 1240 w +11 /LucidaSansUnicode00 f +(stack, is used for the) 720 1370 w +(few) 1875 1370 w +(kernel) 2098 1370 w +(routines executed in the) 2466 1370 w +(AC.) 3803 1370 w +(Because) 970 1536 w +(the) 1441 1536 w +(instructions) 1654 1536 w +(used) 2326 1536 w +(to) 2623 1536 w +(enter) 2773 1536 w +(the) 3093 1536 w +(kernel,) 3306 1536 w +(and) 3716 1536 w +(the) 3956 1536 w +(sequence,) 4170 1536 w +(is) 4751 1536 w +(exactly) 4882 1536 w +(the) 5301 1536 w +(same) 720 1666 w +(in) 1040 1666 w +(both) 1179 1666 w +(the) 1463 1666 w +(TC) 1673 1666 w +(and) 1857 1666 w +(the) 2094 1666 w +(AC,) 2304 1666 w +(no) 2530 1666 w +(change) 2704 1666 w +(is) 3126 1666 w +(needed) 3253 1666 w +(in) 3684 1666 w +(the) 3823 1666 w +(C) 4032 1666 w +(library) 4146 1666 w +(\(other) 4525 1666 w +(than) 4882 1666 w +(a) 5158 1666 w +(new) 5257 1666 w +(system) 720 1796 w +(for) 1143 1796 w +(using) 1345 1796 w +(the) 1686 1796 w +(new) 1906 1796 w +(service\).) 2170 1796 w +(All) 2660 1796 w +(system) 2849 1796 w +(calls) 3272 1796 w +(may) 3558 1796 w +(proceed,) 3827 1796 w +(transparently) 4342 1796 w +(for) 5098 1796 w +(the) 5301 1796 w +(user, in both kinds of) 720 1926 w +(cores.) 1903 1926 w 11 /LucidaSans-Demi f -(8.) 720 2446 w -(Things) 888 2446 w -(not done) 1317 2446 w -(yet) 1856 2446 w -11 /LucidaSansUnicode00 f -(There) 720 2612 w -(are) 1061 2612 w -(a) 1264 2612 w -(few) 1360 2612 w -(other) 1584 2612 w -(things) 1903 2612 w -(that) 2272 2612 w -(have) 2519 2612 w -(to) 2803 2612 w -(be) 2947 2612 w -(done.) 3114 2612 w -(To) 3451 2612 w -(name) 3623 2612 w -(a) 3952 2612 w -(few:) 4049 2612 w -(Including) 4308 2612 w -(more) 4837 2612 w -(statis\255) 5149 2612 w -(tics) 720 2742 w -(in) 949 2742 w -(the) 1093 2742 w +(7.) 720 2186 w +(Queue) 888 2186 w +(based) 1289 2186 w +(system) 1663 2186 w +(calls?) 2105 2186 w +11 /LucidaSansUnicode00 f +(As) 720 2352 w +(an) 894 2352 w +(experiment,) 1065 2352 w +(we) 1752 2352 w +(implemented) 1941 2352 w +(a) 2685 2352 w +(small) 2789 2352 w +(thread) 3115 2352 w +(library) 3504 2352 w +(supporting) 3888 2352 w +(queue-based) 4514 2352 w +(sys\255) 5267 2352 w +(tem) 720 2482 w +(calls) 965 2482 w +(similar) 1242 2482 w +(to) 1642 2482 w +(those) 1790 2482 w +(in) 2124 2482 w +([5].) 2264 2482 w +(Threads) 2480 2482 w +(are) 2950 2482 w +(cooperatively) 3158 2482 w +(scheduled) 3905 2482 w +(within) 4486 2482 w +(the) 4851 2482 w +(process) 5061 2482 w +(and not) 720 2612 w +(known to the) 1164 2612 w +(kernel.) 1900 2612 w +(Each) 970 2778 w +(process) 1288 2778 w +(has) 1773 2778 w +(been) 2032 2778 w +(provided) 2367 2778 w +(with) 2911 2778 w +(two) 3211 2778 w +(queues:) 3478 2778 w +(one) 3972 2778 w +(to) 4243 2778 w +(record) 4425 2778 w +(system) 4843 2778 w +(call) 5291 2778 w +(requests,) 720 2908 w +(and) 1255 2908 w +(another) 1494 2908 w +(to) 1947 2908 w +(record) 2096 2908 w +(system) 2481 2908 w +(call) 2896 2908 w +(replies.) 3118 2908 w +(When) 3551 2908 w +(a) 3884 2908 w +(thread) 3985 2908 w +(issues) 4371 2908 w +(a) 4741 2908 w +(system) 4842 2908 w +(call,) 5256 2908 w +(it) 720 3038 w +(fills) 837 3038 w +(up) 1074 3038 w +(an) 1255 3038 w +(slot) 1428 3038 w +(in) 1668 3038 w +(the) 1812 3038 w +(system) 2027 3038 w +(call) 2445 3038 w +(queue,) 2670 3038 w +(instead) 3078 3038 w +(of) 3511 3038 w +(making) 3663 3038 w +(an) 4102 3038 w +(actual) 4276 3038 w +(system) 4640 3038 w +(call.) 5059 3038 w +(At) 5355 3038 w +(that) 720 3168 w +(point,) 967 3168 w +(the) 1315 3168 w +(thread) 1522 3168 w +(library) 1904 3168 w +(marks) 2281 3168 w +(the) 2645 3168 w +(thread as blocked and proceeds to execute) 2852 3168 w +(other) 5189 3168 w +(threads.) 720 3298 w +(When) 1214 3298 w +(all) 1564 3298 w +(the) 1746 3298 w +(threads) 1974 3298 w +(are) 2433 3298 w +(blocked,) 2658 3298 w +(the) 3169 3298 w +(process) 3397 3298 w +(waits) 3865 3298 w +(for) 4197 3298 w +(replies) 4407 3298 w +(in) 4822 3298 w +(the) 4979 3298 w +(reply) 5207 3298 w +(queue.) 720 3428 w +(Before) 970 3594 w +(using) 1352 3594 w +(the) 1685 3594 w +(queue) 1897 3594 w +(mechanism,) 2268 3594 w +(the) 2952 3594 w +(process) 3165 3594 w +(issues) 3618 3594 w +(a) 3990 3594 w +(real) 4093 3594 w +(system) 4335 3594 w +(call) 4751 3594 w +(to) 4974 3594 w +(let) 5124 3594 w +(the) 5301 3594 w +(kernel) 720 3724 w +(know.) 1104 3724 w +(In) 1474 3724 w +(response) 1625 3724 w +(to) 2161 3724 w +(this) 2320 3724 w +(call,) 2568 3724 w +(the) 2835 3724 w +(kernel) 3056 3724 w +(creates) 3439 3724 w +(a) 3872 3724 w +(\(kernel\)) 3983 3724 w +(process) 4438 3724 w +(sharing) 4899 3724 w +(all) 5347 3724 w +(segments) 720 3854 w +(with) 1281 3854 w +(the) 1553 3854 w +(caller.) 1770 3854 w +(This) 2139 3854 w +(process) 2410 3854 w +(is) 2867 3854 w +(responsible) 3001 3854 w +(for) 3665 3854 w +(executing) 3864 3854 w +(the) 4435 3854 w +(queued) 4653 3854 w +(system) 5098 3854 w +(calls and placing replies for them in the) 720 3984 w +(reply queue.) 2876 3984 w +(With) 970 4150 w +(this) 1245 4150 w +(implementation,) 1481 4150 w +(we) 2394 4150 w +(made) 2580 4150 w +(several) 2913 4150 w +(performance) 3327 4150 w +(measurements) 4044 4150 w +(before) 4869 4150 w +(pro\255) 5255 4150 w +(ceeding) 720 4280 w +(further.) 1192 4280 w +(In) 1652 4280 w +(particular,) 1807 4280 w +(we) 2407 4280 w +(measured) 2609 4280 w +(how) 3189 4280 w +(long) 3464 4280 w +(it) 3754 4280 w +(takes) 3882 4280 w +(for) 4221 4280 w +(a) 4428 4280 w +(program) 4543 4280 w +(with) 5054 4280 w +(50) 5334 4280 w +(threads) 720 4410 w +(to) 1162 4410 w +(execute) 1310 4410 w +(500) 1768 4410 w +(system) 2015 4410 w +(calls) 2429 4410 w +(in) 2706 4410 w +(each) 2846 4410 w +(thread.) 3133 4410 w +(For) 3554 4410 w +(the) 3766 4410 w +(experiment,) 3978 4410 w +(the) 4664 4410 w +(system) 4876 4410 w +(call) 5291 4410 w +(used does not) 720 4540 w +(block) 1510 4540 w +(and does nothing. The) 1833 4540 w +(table) 3071 4540 w +(shows the) 3371 4540 w +(result:) 3944 4540 w +11 /S f +(_) 2108 4625 w +(___________________________________) 2159 4625 w +11 /LucidaSans-Demi f +(Core) 2163 4755 w +(System) 2591 4755 w +(Call) 3033 4755 w +(Queue) 3413 4755 w +(Call) 3814 4755 w +11 /S f +(_) 2108 4775 w +(___________________________________) 2159 4775 w +11 /LucidaSans-Demi f +(TC) 2217 4905 w 11 /LucidaTypewriter f -(/proc) 1308 2742 w -11 /LucidaSansUnicode00 f -(interface) 1747 2742 w -(to) 2259 2742 w -(reflect) 2411 2742 w -(the) 2794 2742 w -(state) 3009 2742 w -(of) 3314 2742 w -(the) 3465 2742 w -(system,) 3679 2742 w -(considering) 4131 2742 w -(the) 4797 2742 w -(different) 5011 2742 w -(kind) 720 2872 w -(of) 991 2872 w -(cores) 1137 2872 w -(in) 1461 2872 w -(it;) 1599 2872 w -(adding) 1745 2872 w -(an) 2150 2872 w -(interface) 2317 2872 w -(to) 2823 2872 w -(let) 2969 2872 w -(the) 3142 2872 w -(user) 3351 2872 w -(code) 3621 2872 w -(\(or) 3914 2872 w -(the) 4101 2872 w -(kernel\)) 4311 2872 w -(request) 4719 2872 w -(that) 5161 2872 w -(a) 5411 2872 w -(process) 720 3002 w -(should) 1170 3002 w -(continue) 1569 3002 w -(in) 2070 3002 w -(the) 2209 3002 w -(TC) 2419 3002 w -(node) 2603 3002 w -(\(the) 2907 3002 w -(transfer) 3152 3002 w -(has) 3609 3002 w -(been) 3832 3002 w -(implemented) 4131 3002 w -(and) 4870 3002 w -(tested,) 5106 3002 w -(but) 720 3132 w -(there) 937 3132 w -(is) 1254 3132 w -(no) 1381 3132 w -(interface) 1555 3132 w -(yet) 2062 3132 w -(to) 2261 3132 w -(trigger) 2408 3132 w -(it\);) 2808 3132 w -(deciding) 2991 3132 w -(which) 3486 3132 w -(interface) 3834 3132 w -(to) 4342 3132 w -(adopt) 4490 3132 w -(for) 4837 3132 w -(the) 5030 3132 w -(user) 5241 3132 w -(to) 720 3262 w -(call) 883 3262 w -(the) 1119 3262 w -(new) 1345 3262 w -(service,) 1615 3262 w -(and) 2075 3262 w -(to) 2328 3262 w -(what) 2491 3262 w -(extent) 2800 3262 w -(the) 3195 3262 w -(mechanism) 3420 3262 w -(has) 4081 3262 w -(to) 4320 3262 w -(be) 4482 3262 w -(its) 4667 3262 w -(own) 4850 3262 w -(policy;) 5124 3262 w -(implementing) 720 3392 w -(KCs) 1504 3392 w -(\(which) 1754 3392 w -(should) 2145 3392 w -(not) 2551 3392 w -(require) 2773 3392 w -(any) 3202 3392 w -(code,) 3434 3392 w -(because) 3769 3392 w -(they) 4249 3392 w -(must) 4523 3392 w -(execute) 4836 3392 w -(the) 5301 3392 w -(standard) 720 3522 w -(kernel\);) 1238 3522 w -(testing) 1690 3522 w -(and) 2106 3522 w -(debugging) 2352 3522 w -(note) 2972 3522 w -(handling) 3258 3522 w -(for) 3771 3522 w -(AC) 3971 3522 w -(processes;) 4170 3522 w -(more) 4781 3522 w -(testing) 5104 3522 w -(and fine) 720 3652 w -(tuning.) 1191 3652 w +(0.02s) 2722 4905 w +11 /LucidaSansUnicode00 f +(0.06s) 3572 4905 w +11 /S f +(_) 2108 4925 w +(___________________________________) 2159 4925 w 11 /LucidaSans-Demi f -(9.) 720 3912 w -(Evaluation) 888 3912 w -(9.1.) 720 4172 w -(strid3) 986 4172 w -11 /LucidaSansUnicode00 f -(Strid3) 970 4338 w -(is) 1321 4338 w -(part) 1445 4338 w -(of) 1697 4338 w -(the) 1841 4338 w -("tasty) 2048 4338 w -(loops") 2381 4338 w -(set) 2749 4338 w -(of) 2944 4338 w -(benchmarks,) 3088 4338 w -(and) 3810 4338 w -(is) 4044 4338 w -(widely) 4168 4338 w -(used) 4541 4338 w -(in) 4832 4338 w -(HPC) 4969 4338 w -(eval\255) 5224 4338 w -(uation) 720 4468 w -(of) 1111 4468 w -(architectures.) 1273 4468 w -(In) 2055 4468 w -(addition) 2209 4468 w -(to) 2702 4468 w -(performance) 2864 4468 w -(measurement) 3596 4468 w -(it) 4378 4468 w -(has) 4504 4468 w -(been) 4742 4468 w -(used) 5056 4468 w -(to) 5364 4468 w -(find bugs in implementations, such as the) 720 4598 w -(Barcelona) 3002 4598 w -(L3 bug.) 3553 4598 w -(Strid3 models) 970 4764 w -11 /LucidaSans-Italic f -(S) 1743 4764 w +(AC) 2215 5055 w +11 /LucidaTypewriter f +(0.20s) 2722 5055 w +11 /LucidaSansUnicode00 f +(0.04s) 3572 5055 w 11 /S f -(=) 1831 4764 w -11 /LucidaSans-Italic f -(AX) 1910 4764 w -11 /S f -(+) 2081 4764 w -11 /LucidaSans-Italic f -(Y) 2160 4764 w -11 /LucidaSansUnicode00 f -(, or SAXPY, i.e. this loop) 2227 4764 w -9 /LucidaTypewriter f -(void) 940 4934 w -(saxpy\(float*) 1265 4934 w -(x,) 2110 4934 w -(float*) 2305 4934 w -(y,) 2760 4934 w -(int) 2955 4934 w -(n,) 3215 4934 w -(float) 3410 4934 w -(a\)) 3800 4934 w -({) 3995 4934 w -(int) 1070 5044 w -(i;) 1330 5044 w -(for) 1070 5154 w -(\(i) 1330 5154 w -(=) 1525 5154 w -(0;) 1655 5154 w -(i) 1850 5154 w -(<) 1980 5154 w -(n;) 2110 5154 w -(i++\)) 2305 5154 w -({) 2630 5154 w -(y[i]) 1200 5264 w -(=) 1525 5264 w -(a) 1655 5264 w -(*) 1785 5264 w -(x[i]) 1915 5264 w -(+) 2240 5264 w -(y[i];) 2370 5264 w -(}) 1070 5374 w -(}) 940 5484 w -11 /LucidaSansUnicode00 f -(with) 720 5674 w -(a) 990 5674 w -(crucial) 1095 5674 w -(difference:) 1489 5674 w -(the) 2106 5674 w -(stride) 2321 5674 w -(1) 2670 5674 w -(of) 2783 5674 w -(the) 2935 5674 w -(above) 3150 5674 w -(loop) 3510 5674 w -(is) 3789 5674 w -(made) 3922 5674 w -(stride) 4261 5674 w -11 /LucidaSans-Italic f -(n) 4611 5674 w -11 /LucidaSansUnicode00 f -(,) 4679 5674 w -(where) 4759 5674 w -(n) 5126 5674 w -(is) 5239 5674 w -(in) 5372 5674 w -(the) 720 5804 w -(range) 931 5804 w -(of) 1275 5804 w -(1) 1423 5804 w -(to) 1532 5804 w -(1024) 1680 5804 w -(and) 1996 5804 w -(is) 2234 5804 w -(incremented) 2362 5804 w -(each) 3069 5804 w -(time) 3356 5804 w -(through) 3633 5804 w -(the) 4098 5804 w -(loop.) 4308 5804 w -(The) 4617 5804 w -(loop) 4855 5804 w -(is) 5129 5804 w -(also) 5256 5804 w -(run many times to make) 720 5934 w -(sure) 2054 5934 w -(the) 2320 5934 w -(computation is long enough to) 2526 5934 w -(hide) 4206 5934 w -(startup) 4473 5934 w -(overheads.) 4890 5934 w -(The) 720 6064 w -(code) 954 6064 w -(thus looks like:) 1243 6064 w -9 /LucidaTypewriter f -(for\() 1200 6234 w -(j=0;) 1525 6234 w -(j strid3.2M.ac.grap +{ awk '{print $1 " " $4}' < strid3.ac.ppfix.out } > strid3.ac.ppfix.out.grap + +{ awk '{print $1 " " $4}' < strid3.tc.ppfix.out } > strid3.tc.ppfix.out.grap + diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron/include/tube.h --- a/src/9kron/include/tube.h Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron/include/tube.h Thu Jun 09 05:00:14 2011 +0000 @@ -19,10 +19,10 @@ struct Tube { - int msz; - int tsz; - int nmsg; - int nhole; + int msz; /* message size */ + int tsz; /* tube size (# of messages) */ + int nmsg; /* semaphore: # of messages in tube */ + int nhole; /* semaphore: # of free slots in tube */ int hd; int tl; }; diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron/k8/acore.c --- a/src/9kron/k8/acore.c Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron/k8/acore.c Thu Jun 09 05:00:14 2011 +0000 @@ -66,7 +66,6 @@ * We loop because some functions may return and we should * wait for another call. */ - void acsched(void) { @@ -138,7 +137,10 @@ n = nil; pmcupdate(m); - + if(m->proc != nil){ + m->proc->nactrap++; + m->proc->actime1 = fastticks(nil); + } if(u->type < nelem(acvctl)){ v = acvctl[u->type]; if(v != nil){ @@ -164,6 +166,7 @@ /* this case is here for debug only */ m->pfault++; DBG("actrap: cpu%d: PF\n", m->machno); +print("actrap: cpu%d: PF\n", m->machno); break; default: print("actrap: cpu%d: %ulld\n", m->machno, u->type); @@ -190,24 +193,30 @@ if(m->icc->fn != actrapret) acsched(); memmove(u, m->proc->dbgreg, sizeof *u); + if(m->proc) + m->proc->actime += fastticks2us(fastticks(nil) - m->proc->actime1); } void acsyscall(void) { + Proc *p; + /* * If we saved the Ureg into m->proc->dbgregs, * There's nothing else we have to do. * Otherwise, we should m->proc->dbgregs = u; */ DBG("acsyscall: cpu%d\n", m->machno); - m->syscall++; /* would also count it in the TS core */ + p = m->proc; + p->actime1 = fastticks(nil); + p->nacsyscall++; m->icc->rc = ICCSYSCALL; m->cr2 = cr2get(); - fpuprocsave(m->proc); + fpuprocsave(p); mfence(); m->icc->fn = nil; - ready(m->proc); + ready(p); m->load = 0; /* * The next call is probably going to make us jmp @@ -225,6 +234,8 @@ acsysret(void) { DBG("acsysret\n"); + if(m->proc != nil) + m->proc->actime += fastticks2us(fastticks(nil) - m->proc->actime1); _acsysret(); } diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron/k8/tcore.c --- a/src/9kron/k8/tcore.c Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron/k8/tcore.c Thu Jun 09 05:00:14 2011 +0000 @@ -224,6 +224,7 @@ void (*fn)(void); int rc, flush, s; char *n; + uvlong t1; if(waserror()) panic("runacore: error: %s\n", up->errstr); @@ -233,6 +234,7 @@ rc = runac(up->ac, actouser, 1, nil, 0); for(;;){ + t1 = fastticks(nil); flush = 0; fn = nil; switch(rc){ @@ -283,6 +285,7 @@ default: panic("runacore: unexpected rc = %d", rc); } + up->tctime += fastticks2us(fastticks(nil) - t1); rc = runac(up->ac, fn, flush, nil, 0); } ToTC: diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron/k8/trap.c --- a/src/9kron/k8/trap.c Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron/k8/trap.c Thu Jun 09 05:00:14 2011 +0000 @@ -318,8 +318,6 @@ clockintr = 0; - if(up != nil) - up->ntrap++; /* stats only, races ok */ pmcupdate(m); @@ -327,9 +325,12 @@ if(ctl = vctl[vno]){ if(ctl->isintr){ m->intr++; + if(up != nil) + up->nintr++; if(vno >= VectorPIC && vno != VectorSYSCALL) m->lastintr = ctl->irq; - } + }else if(up != nil) + up->ntrap++; if(ctl->isr) ctl->isr(vno); @@ -350,11 +351,15 @@ } } else if(vno <= nelem(excname) && user){ + if(up != nil) + up->ntrap++; spllo(); sprint(buf, "sys: trap: %s", excname[vno]); postnote(up, 1, buf, NDebug); } else{ + if(up != nil) + up->ntrap++; if(vno == VectorNMI){ nmienable(); if(m->machno != 0){ diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron/port/devproc.c --- a/src/9kron/port/devproc.c Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron/port/devproc.c Thu Jun 09 05:00:14 2011 +0000 @@ -72,7 +72,9 @@ Emask = Nevents - 1, }; -#define STATSIZE (2*KNAMELEN+12+9*12 +3*12) +/* + 6 * 12 for extra NIX counters. */ +#define STATSIZE (2*KNAMELEN+12+9*12 +6*12) + /* * Status, fd, and ns are left fully readable (0444) because of their use in debugging, * particularly on shared servers. @@ -924,8 +926,11 @@ * NIX: added # of traps, syscalls, and iccs */ readnum(0, statbuf+j+NUMSIZE*9, NUMSIZE, p->ntrap, NUMSIZE); - readnum(0, statbuf+j+NUMSIZE*10, NUMSIZE, p->nsyscall, NUMSIZE); - readnum(0, statbuf+j+NUMSIZE*11, NUMSIZE, p->nicc, NUMSIZE); + readnum(0, statbuf+j+NUMSIZE*10, NUMSIZE, p->nintr, NUMSIZE); + readnum(0, statbuf+j+NUMSIZE*11, NUMSIZE, p->nsyscall, NUMSIZE); + readnum(0, statbuf+j+NUMSIZE*12, NUMSIZE, p->nicc, NUMSIZE); + readnum(0, statbuf+j+NUMSIZE*13, NUMSIZE, p->nactrap, NUMSIZE); + readnum(0, statbuf+j+NUMSIZE*14, NUMSIZE, p->nacsyscall, NUMSIZE); memmove(va, statbuf+offset, n); psdecref(p); return n; diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron/port/portdat.h --- a/src/9kron/port/portdat.h Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron/port/portdat.h Thu Jun 09 05:00:14 2011 +0000 @@ -791,9 +791,14 @@ int prepagemem; uint ntrap; /* # of traps while in this process */ + uint nintr; /* # of intrs while in this process */ uint nsyscall; /* # of syscalls made by the process */ + uint nactrap; /* # of traps in the AC for this process */ + uint nacsyscall; /* # of syscalls in the AC for this process */ uint nicc; /* # of ICCs for the process */ - + uvlong actime1; /* ticks as of last call in AC */ + uvlong actime; /* ∑time from call in AC to ret to AC, and... */ + uvlong tctime; /* ∑time from call received to call handled */ /* * machine specific fpu, mmu and notify */ diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron/port/proc.c --- a/src/9kron/port/proc.c Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron/port/proc.c Thu Jun 09 05:00:14 2011 +0000 @@ -436,6 +436,8 @@ return; } + if(p->ac == m) + MACHP(0)->readied = p; if(up != p) m->readied = p; /* group scheduling */ @@ -551,7 +553,11 @@ } /* waste time or halt the CPU */ + /* But not on NIX. We need the TC to be alert in + * case the AC issues a syscall and makes its + * handler process ready. idlehands(); + */ /* remember how much time we're here */ now = perfticks(); @@ -658,8 +664,13 @@ p->edf = nil; p->ntrap = 0; + p->nintr = 0; p->nsyscall = 0; + p->nactrap = 0; + p->nacsyscall = 0; p->nicc = 0; + p->actime = 0ULL; + p->tctime = 0ULL; p->ac = nil; return p; } diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron2/include/tube.h --- a/src/9kron2/include/tube.h Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron2/include/tube.h Thu Jun 09 05:00:14 2011 +0000 @@ -16,13 +16,12 @@ TNOP }; - struct Tube { - int msz; - int tsz; - int nmsg; - int nhole; + int msz; /* message size */ + int tsz; /* tube size (# of messages) */ + int nmsg; /* semaphore: # of messages in tube */ + int nhole; /* semaphore: # of free slots in tube */ int hd; int tl; }; diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron2/k8/acore.c --- a/src/9kron2/k8/acore.c Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron2/k8/acore.c Thu Jun 09 05:00:14 2011 +0000 @@ -137,7 +137,10 @@ n = nil; pmcupdate(m); - + if(m->proc != nil){ + m->proc->nactrap++; + m->proc->actime1 = fastticks(nil); + } if(u->type < nelem(acvctl)){ v = acvctl[u->type]; if(v != nil){ @@ -190,24 +193,30 @@ if(m->icc->fn != actrapret) acsched(); memmove(u, m->proc->dbgreg, sizeof *u); + if(m->proc) + m->proc->actime += fastticks2us(fastticks(nil) - m->proc->actime1); } void acsyscall(void) { + Proc *p; + /* * If we saved the Ureg into m->proc->dbgregs, * There's nothing else we have to do. * Otherwise, we should m->proc->dbgregs = u; */ DBG("acsyscall: cpu%d\n", m->machno); - m->syscall++; /* would also count it in the TS core */ + p = m->proc; + p->actime1 = fastticks(nil); + p->nacsyscall++; m->icc->rc = ICCSYSCALL; m->cr2 = cr2get(); - fpuprocsave(m->proc); + fpuprocsave(p); mfence(); m->icc->fn = nil; - ready(m->proc); + ready(p); m->load = 0; /* * The next call is probably going to make us jmp @@ -225,6 +234,8 @@ acsysret(void) { DBG("acsysret\n"); + if(m->proc != nil) + m->proc->actime += fastticks2us(fastticks(nil) - m->proc->actime1); _acsysret(); } diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron2/k8/tcore.c --- a/src/9kron2/k8/tcore.c Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron2/k8/tcore.c Thu Jun 09 05:00:14 2011 +0000 @@ -224,6 +224,7 @@ void (*fn)(void); int rc, flush, s; char *n; + uvlong t1; if(waserror()) panic("runacore: error: %s\n", up->errstr); @@ -233,6 +234,7 @@ rc = runac(up->ac, actouser, 1, nil, 0); for(;;){ + t1 = fastticks(nil); flush = 0; fn = nil; switch(rc){ @@ -283,6 +285,7 @@ default: panic("runacore: unexpected rc = %d", rc); } + up->tctime += fastticks2us(fastticks(nil) - t1); rc = runac(up->ac, fn, flush, nil, 0); } ToTC: diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron2/k8/trap.c --- a/src/9kron2/k8/trap.c Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron2/k8/trap.c Thu Jun 09 05:00:14 2011 +0000 @@ -327,9 +327,12 @@ if(ctl = vctl[vno]){ if(ctl->isintr){ m->intr++; + if(up != nil) + up->nintr++; if(vno >= VectorPIC && vno != VectorSYSCALL) m->lastintr = ctl->irq; - } + }else if(up != nil) + up->ntrap++; if(ctl->isr) ctl->isr(vno); @@ -350,11 +353,15 @@ } } else if(vno <= nelem(excname) && user){ + if(up != nil) + up->ntrap++; spllo(); sprint(buf, "sys: trap: %s", excname[vno]); postnote(up, 1, buf, NDebug); } else{ + if(up != nil) + up->ntrap++; if(vno == VectorNMI){ nmienable(); if(m->machno != 0){ diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron2/port/devproc.c --- a/src/9kron2/port/devproc.c Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron2/port/devproc.c Thu Jun 09 05:00:14 2011 +0000 @@ -72,7 +72,9 @@ Emask = Nevents - 1, }; -#define STATSIZE (2*KNAMELEN+12+9*12 +3*12) +/* + 6 * 12 for extra NIX counters. */ +#define STATSIZE (2*KNAMELEN+12+9*12 +6*12) + /* * Status, fd, and ns are left fully readable (0444) because of their use in debugging, * particularly on shared servers. @@ -924,8 +926,11 @@ * NIX: added # of traps, syscalls, and iccs */ readnum(0, statbuf+j+NUMSIZE*9, NUMSIZE, p->ntrap, NUMSIZE); - readnum(0, statbuf+j+NUMSIZE*10, NUMSIZE, p->nsyscall, NUMSIZE); - readnum(0, statbuf+j+NUMSIZE*11, NUMSIZE, p->nicc, NUMSIZE); + readnum(0, statbuf+j+NUMSIZE*10, NUMSIZE, p->nintr, NUMSIZE); + readnum(0, statbuf+j+NUMSIZE*11, NUMSIZE, p->nsyscall, NUMSIZE); + readnum(0, statbuf+j+NUMSIZE*12, NUMSIZE, p->nicc, NUMSIZE); + readnum(0, statbuf+j+NUMSIZE*13, NUMSIZE, p->nactrap, NUMSIZE); + readnum(0, statbuf+j+NUMSIZE*14, NUMSIZE, p->nacsyscall, NUMSIZE); memmove(va, statbuf+offset, n); psdecref(p); return n; diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron2/port/portdat.h --- a/src/9kron2/port/portdat.h Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron2/port/portdat.h Thu Jun 09 05:00:14 2011 +0000 @@ -791,8 +791,14 @@ int prepagemem; uint ntrap; /* # of traps while in this process */ + uint nintr; /* # of intrs while in this process */ uint nsyscall; /* # of syscalls made by the process */ + uint nactrap; /* # of traps in the AC for this process */ + uint nacsyscall; /* # of syscalls in the AC for this process */ uint nicc; /* # of ICCs for the process */ + uvlong actime1; /* ticks as of last call in AC */ + uvlong actime; /* ∑time from call in AC to ret to AC, and... */ + uvlong tctime; /* ∑time from call received to call handled */ /* * machine specific fpu, mmu and notify diff -r 04d588e3b9d4 -r 77435bee0cf6 src/9kron2/port/proc.c --- a/src/9kron2/port/proc.c Wed Jun 08 12:15:23 2011 +0000 +++ b/src/9kron2/port/proc.c Thu Jun 09 05:00:14 2011 +0000 @@ -436,6 +436,8 @@ return; } + if(p->ac == m) + MACHP(0)->readied = p; if(up != p) m->readied = p; /* group scheduling */ @@ -551,7 +553,11 @@ } /* waste time or halt the CPU */ + /* But not on NIX. We need the TC to be alert in + * case the AC issues a syscall and makes its + * handler process ready. idlehands(); + */ /* remember how much time we're here */ now = perfticks(); @@ -658,8 +664,13 @@ p->edf = nil; p->ntrap = 0; + p->nintr = 0; p->nsyscall = 0; + p->nactrap = 0; + p->nacsyscall = 0; p->nicc = 0; + p->actime = 0ULL; + p->tctime = 0ULL; p->ac = nil; return p; }