Warning, cross-references for /kernel/tests/test7.c need to be fixed.
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #include "syscall.h"
0019
0020 #define ITERATIONS 1000000
0021 #define NUM_THREADS 4
0022
0023 void
0024 putx (unsigned long l)
0025 {
0026 int i, li;
0027
0028 for (i = 7; i >= 0; i--)
0029 if ((li = (l >> (i << 2)) & 0x0F) > 9)
0030 putchar ('A' + li - 0x0A);
0031 else
0032 putchar ('0' + li);
0033 }
0034
0035 void
0036 print (char *s)
0037 {
0038 while (*s) {
0039 putchar (*s++);
0040 }
0041 }
0042
0043 void
0044 child (int idx)
0045 {
0046 int id, i;
0047 unsigned long ebx, eax = 1;
0048
0049 for (i=0;i<ITERATIONS;i++) {
0050 if (!(i & 0xFFF)) {
0051 asm volatile ("cpuid":"=b" (ebx), "+a" (eax)::"ecx", "edx");
0052 id = (ebx >> 24) & 0xFF;
0053 putchar (id + '0');
0054 }
0055 }
0056
0057 _exit (0);
0058 }
0059
0060 void
0061 _start ()
0062 {
0063 int pid[NUM_THREADS];
0064 int i;
0065
0066 for (i=0; i<NUM_THREADS; i++) {
0067 if ((pid[i]=fork ()) == 0) {
0068 child (i);
0069 } else putchar ('F');
0070 }
0071 _exit (0);
0072 }
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084