⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sched.patch

📁 MINIX操作系统的内核修改补丁
💻 PATCH
字号:
diff -c -Nr src.clean/include/minix/callnr.h src/include/minix/callnr.h*** src.clean/include/minix/callnr.h	Sat Oct 18 22:06:43 2008--- src/include/minix/callnr.h	Sat Oct 18 22:44:14 2008****************** 57,62 ****--- 57,63 ----  #define UNPAUSE		  65	/* to MM or FS: check for EINTR */  #define REVIVE	 	  67	/* to FS: revive a sleeping process */  #define TASK_REPLY	  68	/* to FS: reply code from tty task */+ #define SETDL		  69    /* to MM */    /* Posix signal handling. */  #define SIGACTION	  71diff -c -Nr src.clean/include/minix/com.h src/include/minix/com.h*** src.clean/include/minix/com.h	Sat Oct 18 22:06:43 2008--- src/include/minix/com.h	Sat Oct 18 22:38:51 2008****************** 278,285 ****  #  define SYS_IOPENABLE  (KERNEL_CALL + 28)	/* sys_enable_iop() */  #  define SYS_VM_SETBUF  (KERNEL_CALL + 29)	/* sys_vm_setbuf() */  #  define SYS_VM_MAP  	 (KERNEL_CALL + 30)	/* sys_vm_map() */  ! #define NR_SYS_CALLS	31	/* number of system calls */     /* Subfunctions for SYS_PRIVCTL */  #define SYS_PRIV_INIT		1	/* Initialize a privilege structure */--- 278,286 ----  #  define SYS_IOPENABLE  (KERNEL_CALL + 28)	/* sys_enable_iop() */  #  define SYS_VM_SETBUF  (KERNEL_CALL + 29)	/* sys_vm_setbuf() */  #  define SYS_VM_MAP  	 (KERNEL_CALL + 30)	/* sys_vm_map() */+ #  define SYS_SETDL	 (KERNEL_CALL + 31)     /* sys_setdl() */  ! #define NR_SYS_CALLS	32	/* number of system calls */     /* Subfunctions for SYS_PRIVCTL */  #define SYS_PRIV_INIT		1	/* Initialize a privilege structure */diff -c -Nr src.clean/include/minix/syslib.h src/include/minix/syslib.h*** src.clean/include/minix/syslib.h	Sat Oct 18 22:06:43 2008--- src/include/minix/syslib.h	Sun Oct 19 00:05:30 2008****************** 42,47 ****--- 42,48 ----  							phys_bytes high));  _PROTOTYPE( int sys_vm_map, (int proc_nr, int do_map,  	phys_bytes base, phys_bytes size, phys_bytes offset));+ _PROTOTYPE( int sys_setdl, (int proc, long deadline));    /* Shorthands for sys_sdevio() system call. */  #define sys_insb(port, proc_nr, buffer, count) \diff -c -Nr src.clean/include/unistd.h src/include/unistd.h*** src.clean/include/unistd.h	Sat Oct 18 22:06:43 2008--- src/include/unistd.h	Sat Oct 18 22:37:25 2008****************** 144,149 ****--- 144,150 ----  _PROTOTYPE( ssize_t write, (int _fd, const void *_buf, size_t _n)	);  _PROTOTYPE( int truncate, (const char *_path, off_t _length)		);  _PROTOTYPE( int ftruncate, (int _fd, off_t _length)			);+ _PROTOTYPE( int setdl, (long deadline)					);    /* Open Group Base Specifications Issue 6 (not complete) */  _PROTOTYPE( int symlink, (const char *path1, const char *path2)		);diff -c -Nr src.clean/kernel/config.h src/kernel/config.h*** src.clean/kernel/config.h	Sat Oct 18 22:06:43 2008--- src/kernel/config.h	Sat Oct 18 22:54:40 2008****************** 42,47 ****--- 42,48 ----  #define USE_PHYSCOPY  	   1 	/* copy using physical addressing */  #define USE_PHYSVCOPY  	   1	/* vector with physical copy requests */  #define USE_MEMSET  	   1	/* write char to a given memory area */+ #define USE_SETDL	   1    /* we use real time scheduling */    /* Length of program names stored in the process table. This is only used   * for the debugging dumps that can be generated with the IS server. The PMdiff -c -Nr src.clean/kernel/proc.c src/kernel/proc.c*** src.clean/kernel/proc.c	Sat Oct 18 22:06:44 2008--- src/kernel/proc.c	Sat Oct 18 23:19:40 2008****************** 611,617 ****     */    if (! time_left) {				/* quantum consumed ? */        rp->p_ticks_left = rp->p_quantum_size; 	/* give new quantum */!       if (rp->p_priority < (IDLE_Q-1)) {  	             rp->p_priority += 1;			/* lower priority */        }    }--- 611,617 ----     */    if (! time_left) {				/* quantum consumed ? */        rp->p_ticks_left = rp->p_quantum_size; 	/* give new quantum */!       if (rp->deadline == 0 && rp->p_priority < (IDLE_Q-1) ) {  	             rp->p_priority += 1;			/* lower priority */        }    }****************** 634,639 ****--- 634,640 ----   * clock task can tell who to bill for system time.   */    register struct proc *rp;			/* process to run */+   register struct proc *iter;    int q;					/* iterate over queues */      /* Check each of the scheduling queues for ready processes. The number of****************** 642,647 ****--- 643,658 ----     */    for (q=0; q < NR_SCHED_QUEUES; q++) {	        if ( (rp = rdy_head[q]) != NIL_PROC) {+ 	  if (q>6)+ 	  {+ 	    for (iter = rdy_head[q];iter!=NIL_PROC;iter = iter->p_nextready)+ 	    {+ 	      if ( rp->deadline ==0 ||( iter->deadline>0 && iter->deadline<rp->deadline))+ 	      {+ 	        rp = iter;+ 	      }+ 	    }+ 	  }             next_ptr = rp;			/* run process 'rp' next */            if (priv(rp)->s_flags & BILLABLE)	 	                bill_ptr = rp;			/* bill for system time */diff -c -Nr src.clean/kernel/proc.h src/kernel/proc.h*** src.clean/kernel/proc.h	Sat Oct 18 22:06:44 2008--- src/kernel/proc.h	Sat Oct 18 22:57:41 2008****************** 53,58 ****--- 53,59 ----    char p_name[P_NAME_LEN];	/* name of the process, including \0 */      int p_endpoint;		/* endpoint number, generation-aware */+   long deadline;                /* deadline */    #if DEBUG_SCHED_CHECK    int p_ready, p_found;diff -c -Nr src.clean/kernel/system/do_times.c src/kernel/system/do_times.c*** src.clean/kernel/system/do_times.c	Sat Oct 18 22:06:44 2008--- src/kernel/system/do_times.c	Sat Oct 18 22:53:12 2008****************** 40,42 ****--- 40,55 ----    #endif /* USE_TIMES */  + #if USE_SETDL+ PUBLIC int do_setdl(m_ptr)+ register message *m_ptr;+ {+  register struct proc *rp;+  int proc_nr;+  +  proc_nr = m_ptr->m2_i1;+  rp = proc_addr(proc_nr);+  rp->deadline = m_ptr->m2_l1*60 + get_uptime();+  return(OK);+ }+ #endif /* use_times */diff -c -Nr src.clean/kernel/system.c src/kernel/system.c*** src.clean/kernel/system.c	Sat Oct 18 22:06:44 2008--- src/kernel/system.c	Sat Oct 18 22:50:21 2008****************** 179,184 ****--- 179,186 ----    map(SYS_ABORT, do_abort);		/* abort MINIX */    map(SYS_GETINFO, do_getinfo); 	/* request system information */     map(SYS_IOPENABLE, do_iopenable); 	/* Enable I/O */+ +   map(SYS_SETDL, do_setdl);  }    /*===========================================================================*diff -c -Nr src.clean/kernel/system.h src/kernel/system.h*** src.clean/kernel/system.h	Sat Oct 18 22:06:44 2008--- src/kernel/system.h	Sat Oct 18 22:48:03 2008****************** 175,179 ****--- 175,181 ----    _PROTOTYPE( int do_iopenable, (message *m_ptr) );	  + _PROTOTYPE( int do_setdl, (message *m_ptr));+   #endif	/* SYSTEM_H */  diff -c -Nr src.clean/kernel/table.c src/kernel/table.c*** src.clean/kernel/table.c	Sat Oct 18 22:06:44 2008--- src/kernel/table.c	Sat Oct 18 22:55:34 2008****************** 79,85 ****  #define c(n)	(1 << ((n)-KERNEL_CALL))  #define RS_C	~0	  #define DS_C	~0	! #define PM_C	~(c(SYS_DEVIO) | c(SYS_SDEVIO) | c(SYS_VDEVIO) | c(SYS_IRQCTL) | c(SYS_INT86))  #define FS_C	(c(SYS_KILL) | c(SYS_VIRCOPY) | c(SYS_VIRVCOPY) | c(SYS_UMAP) | c(SYS_GETINFO) | c(SYS_EXIT) | c(SYS_TIMES) | c(SYS_SETALARM))  #define DRV_C (FS_C | c(SYS_SEGCTL) | c(SYS_IRQCTL) | c(SYS_INT86) | c(SYS_DEVIO) | c(SYS_SDEVIO) | c(SYS_VDEVIO))  #define TTY_C (DRV_C | c(SYS_ABORT) | c(SYS_VM_MAP) | c(SYS_IOPENABLE))--- 79,85 ----  #define c(n)	(1 << ((n)-KERNEL_CALL))  #define RS_C	~0	  #define DS_C	~0	! #define PM_C	~(c(SYS_DEVIO) | c(SYS_SDEVIO) | c(SYS_VDEVIO) | c(SYS_IRQCTL) | c(SYS_INT86)) | c(SYS_SETDL)  #define FS_C	(c(SYS_KILL) | c(SYS_VIRCOPY) | c(SYS_VIRVCOPY) | c(SYS_UMAP) | c(SYS_GETINFO) | c(SYS_EXIT) | c(SYS_TIMES) | c(SYS_SETALARM))  #define DRV_C (FS_C | c(SYS_SEGCTL) | c(SYS_IRQCTL) | c(SYS_INT86) | c(SYS_DEVIO) | c(SYS_SDEVIO) | c(SYS_VDEVIO))  #define TTY_C (DRV_C | c(SYS_ABORT) | c(SYS_VM_MAP) | c(SYS_IOPENABLE))diff -c -Nr src.clean/lib/posix/Makefile src/lib/posix/Makefile*** src.clean/lib/posix/Makefile	Sat Oct 18 22:06:49 2008--- src/lib/posix/Makefile	Sat Oct 18 22:31:53 2008****************** 80,85 ****--- 80,86 ----  ../obj-ack//libc.a: ../obj-ack//libc.a(_rmdir.o)  ../obj-ack//libc.a: ../obj-ack//libc.a(_select.o)  ../obj-ack//libc.a: ../obj-ack//libc.a(_setgid.o)+ ../obj-ack//libc.a: ../obj-ack//libc.a(_setdl.o)  ../obj-ack//libc.a: ../obj-ack//libc.a(_setsid.o)  ../obj-ack//libc.a: ../obj-ack//libc.a(_setuid.o)  ../obj-ack//libc.a: ../obj-ack//libc.a(_sigaction.o)****************** 241,246 ****--- 242,249 ----  	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./posix/_rmdir.o _rmdir.c  ../obj-ack//libc.a(_select.o): _select.c  	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./posix/_select.o _select.c+ ../obj-ack//libc.a(_setdl.o): _setdl.c+ 	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./posix/_setdl.o _setdl.c  ../obj-ack//libc.a(_setgid.o): _setgid.c  	cc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-ack//./posix/_setgid.o _setgid.c  ../obj-ack//libc.a(_setsid.o): _setsid.c****************** 377,382 ****--- 380,386 ----  ../obj-gnu/libc.a: ../obj-gnu/./posix/_rename.o  ../obj-gnu/libc.a: ../obj-gnu/./posix/_rewinddir.o  ../obj-gnu/libc.a: ../obj-gnu/./posix/_rmdir.o+ ../obj-gnu/libc.a: ../obj-gnu/./posix/_setdl.o  ../obj-gnu/libc.a: ../obj-gnu/./posix/_select.o  ../obj-gnu/libc.a: ../obj-gnu/./posix/_setgid.o  ../obj-gnu/libc.a: ../obj-gnu/./posix/_setsid.o****************** 602,607 ****--- 606,615 ----  ../obj-gnu/./posix/_setgid.o: _setgid.c  	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./posix/_setgid.o _setgid.c  + ../obj-gnu/./posix/_setdl.o: _setdl.c+ 	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./posix/_setdl.o _setdl.c+ +   ../obj-gnu/./posix/_setsid.o: _setsid.c  	gcc -O -D_MINIX -D_POSIX_SOURCE -c -o ../obj-gnu/./posix/_setsid.o _setsid.c  diff -c -Nr src.clean/lib/posix/_setdl.c src/lib/posix/_setdl.c*** src.clean/lib/posix/_setdl.c	Thu Jan  1 00:00:00 1970--- src/lib/posix/_setdl.c	Sat Oct 18 22:25:00 2008****************** 0 ****--- 1,9 ----+ #include <lib.h>+ #include <unistd.h>+ + PUBLIC int setdl(long deadline)+ {+   message m;+   m.m4_l1 = deadline;+   return (_syscall(MM,69,&m));+ }diff -c -Nr src.clean/lib/syslib/sys_fork.c src/lib/syslib/sys_fork.c*** src.clean/lib/syslib/sys_fork.c	Sat Oct 18 22:06:50 2008--- src/lib/syslib/sys_fork.c	Sat Oct 18 22:49:38 2008****************** 16,18 ****--- 16,26 ----    *child_endpoint = m.PR_ENDPT;    return r;  }+ + PUBLIC int sys_setdl(int proc, long deadline)+ {+   message m;+   m.m2_l1 = deadline;+   m.m2_i1 = proc;+   return(_taskcall(SYSTASK, SYS_SETDL, &m));+ }diff -c -Nr src.clean/servers/pm/misc.c src/servers/pm/misc.c*** src.clean/servers/pm/misc.c	Sat Oct 18 22:06:54 2008--- src/servers/pm/misc.c	Sat Oct 18 22:15:59 2008****************** 427,429 ****--- 427,439 ----    return(_syscall(FS_PROC_NR, WRITE, &m));  }  + /*===========================================================================*+  *				do_setdl				     *+  *===========================================================================*/+ PUBLIC int do_setdl()+ {+   long deadline = (long)m_in.m4_l1;+   sys_setdl(who_p,deadline);+   return(OK);+ }+ diff -c -Nr src.clean/servers/pm/proto.h src/servers/pm/proto.h*** src.clean/servers/pm/proto.h	Sat Oct 18 22:06:54 2008--- src/servers/pm/proto.h	Sat Oct 18 22:13:50 2008****************** 66,71 ****--- 66,72 ----  _PROTOTYPE( int do_getsetpriority, (void)					);  _PROTOTYPE( ssize_t _read_pm, (int _fd, void *_buf, size_t _n, int s, int e));  _PROTOTYPE( ssize_t _write_pm, (int _fd, void *_buf, size_t _n, int s, int e));+ _PROTOTYPE( int do_setdl, (void)                                        );      #if (MACHINE == MACINTOSH)diff -c -Nr src.clean/servers/pm/table.c src/servers/pm/table.c*** src.clean/servers/pm/table.c	Sat Oct 18 22:06:54 2008--- src/servers/pm/table.c	Sat Oct 18 22:12:49 2008****************** 84,90 ****  	no_sys, 	/* 66 = unused  */  	no_sys,		/* 67 = REVIVE	*/  	no_sys,		/* 68 = TASK_REPLY  */! 	no_sys,		/* 69 = unused	*/  	no_sys,		/* 70 = unused	*/  	do_sigaction,	/* 71 = sigaction   */  	do_sigsuspend,	/* 72 = sigsuspend  */--- 84,90 ----  	no_sys, 	/* 66 = unused  */  	no_sys,		/* 67 = REVIVE	*/  	no_sys,		/* 68 = TASK_REPLY  */! 	do_setdl,	/* 69 = do_setdl    */  	no_sys,		/* 70 = unused	*/  	do_sigaction,	/* 71 = sigaction   */  	do_sigsuspend,	/* 72 = sigsuspend  */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -