资源简介
minix内核修改,增加实时进程和实时调度:
1 增加系统调用chrt
函数格式
s = chrt(long deadline)
函数功能
设置进程为实时进程并在deadline秒后结束。如果deadline为0,则将进程设置为非实时进程。设置成功返回0,否则返回1.
2 实现EDF(Earliest-Deadline-First)实时调度算法
EDF
deadline越近的进程越先执行
实时调度
设置进程的优先级,保证进程的优先级高于其他用户进程,以保证它的实时性。但要考虑不会影响系统进程的执行。
![](http://www.nz998.com/pic/45646.jpg)
代码片段和文件信息
/* This file contains the main program of MINIX as well as its shutdown code.
* The routine main() initializes the system and starts the ball rolling by
* setting up the process table interrupt vectors and scheduling each task
* to run to initialize itself.
* The routine shutdown() does the opposite and brings down MINIX.
*
* The entries into this file are:
* main: MINIX main program
* prepare_shutdown: prepare to take MINIX down
*/
#include “kernel.h“
#include
#include
#include
#include
#include
#include “proc.h“
#include “debug.h“
#include “clock.h“
/* Prototype declarations for PRIVATE functions. */
FORWARD _PROTOTYPE( void announce (void));
/*===========================================================================*
* main *
*===========================================================================*/
PUBLIC void main()
{
/* Start the ball rolling. */
struct boot_image *ip; /* boot image pointer */
register struct proc *rp; /* process pointer */
register struct priv *sp; /* privilege structure pointer */
register int i j;
int hdrindex; /* index to array of a.out headers */
phys_clicks text_base;
vir_clicks text_clicks data_clicks st_clicks;
reg_t ktsb; /* kernel task stack base */
struct exec e_hdr; /* for a copy of an a.out header */
/* Global value to test segment sanity. */
magictest = MAGICTEST;
/* Clear the process table. Anounce each slot as empty and set up mappings
* for proc_addr() and proc_nr() macros. Do the same for the table with
* privilege structures for the system processes.
*/
for (rp = BEG_PROC_ADDR i = -NR_TASKS; rp < END_PROC_ADDR; ++rp ++i) {
rp->p_rts_flags = RTS_SLOT_FREE; /* initialize free slot */
rp->p_deadline.tmr_exp_time = 0; /* realtime scheduling*/
#if DEBUG_SCHED_CHECK
rp->p_magic = PMAGIC;
#endif
rp->p_nr = i; /* proc number from ptr */
rp->p_endpoint = _ENDPOINT(0 rp->p_nr); /* generation no. 0 */
}
for (sp = BEG_PRIV_ADDR i = 0; sp < END_PRIV_ADDR; ++sp ++i) {
sp->s_proc_nr = NONE; /* initialize as free */
sp->s_id = (proc_nr_t) i; /* priv structure index */
ppriv_addr[i] = sp; /* priv ptr from number */
}
/* Set up proc table entries for processes in boot image. The stacks of the
* kernel tasks are initialized to an array in data space. The stacks
* of the servers have been added to the data segment by the monitor so
* the stack pointer is set to the end of the data segment. All the
* processes are in low memory on the 8086. On the 386 only the kernel
* is in low memory the rest is loaded in extended memory.
*/
/* Task stacks. */
ktsb = (reg_t) t_stack;
for (i=0; i < NR_BOOT_PROCS; ++i) {
int schedulable_proc;
proc_nr_t proc_nr;
int ipc_to_m kcalls;
ip = &image[i]; /* proc
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 78848 2010-05-22 18:02 Minix3 project2 文档.doc
文件 3248 2010-05-05 19:02 src\include\minix\callnr.h
文件 43529 2010-05-05 19:07 src\include\minix\com.h
文件 12348 2010-05-05 19:10 src\include\minix\syslib.h
文件 9847 2010-05-05 21:55 src\include\unistd.h
文件 3221 2010-05-03 16:39 src\kernel\config.h
文件 11556 2010-05-09 15:53 src\kernel\main.c
文件 50345 2010-05-09 17:03 src\kernel\proc.c
文件 10784 2010-05-05 20:28 src\kernel\proc.h
文件 1380 2010-05-10 17:38 src\kernel\system\do_chrt.c
文件 1384 2010-05-10 17:37 src\kernel\system\do_chrt.c.bak
文件 3180 2010-05-03 16:02 src\kernel\system\do_exit.c
文件 3657 2010-05-03 22:00 src\kernel\system\Makefile
文件 22847 2010-05-03 16:41 src\kernel\system.c
文件 5750 2010-05-03 16:38 src\kernel\system.h
文件 1555 2010-05-03 22:50 src\lib\posix\Makefile.in
文件 169 2010-05-09 15:23 src\lib\posix\_chrt.c
文件 1428 2010-05-04 11:04 src\lib\syslib\Makefile.in
文件 457 2010-05-09 15:22 src\lib\syslib\sys_chrt.c
文件 18420 2010-05-08 11:09 src\servers\pm\misc.c
文件 3471 2010-05-03 22:15 src\servers\pm\proto.h
文件 3885 2010-05-07 16:38 src\servers\pm\table.c
目录 0 2010-05-06 20:37 src\include\minix
目录 0 2010-05-10 17:38 src\kernel\system
目录 0 2010-05-06 14:20 src\lib\posix
目录 0 2010-05-06 20:55 src\lib\syslib
目录 0 2010-05-06 20:42 src\servers\pm
目录 0 2010-05-06 14:50 src\include
目录 0 2010-05-09 17:05 src\kernel
目录 0 2010-05-06 14:20 src\lib
............此处省略5个文件信息
相关资源
- FPGA实现PID.v
- 计算机图形学 边填充算法实现代码
- oracle数据迁移项目实施方案
- 60个HFSS 仿真模型库
-
Actionsc
ript 1.0实现能跟随鼠标运动的 - 大斜度定向井钻井设计优化及应用实
- 基于蓝牙4.0的设备通信方案设计与实
- 基于xilinx FPGA的PCIe设计实战
- 基于PCIe的FPGA动态配置设计与实现
- 周立功开发板ProASIC3实验-syn_FIFO代码
- 编译原理实验工具及参考源码(lex&
- SSM+Shiro+redis实现单点登陆
- UNIX/LINUX编程实践教程的源码
- dotnet 写字板 实验 源代码 不好请要不
- 使用选择性重传协议实现UDP可靠通信
- 实现小波变换例子 upcoef 函数
- 类pascal语言编译器(编译原理实验)
- DELPHI与西门子200PLC的串口通信实例
- mybatis连接oracle实例
- 数学建模实验报告(八个全)
- 图像二维小波变换的实现源代码
- 栈的实现及应用,六种基本算法
- 用汇编实现的学生成绩档案管理系统
- pb 实现仿BS界面 dw菜单 powerbuild
- 数值分析所有实验代码
- 基于MIPS指令集的32位CPU设计与Verilog语
- 导线测量平差程序 很实用
- LabVIEW钢琴实例
- 通信软件的具体实例──基于Socket的
- python实现的ftp自动上传、下载脚本
评论
共有 条评论