资源简介
minix内核修改,增加实时进程和实时调度:
1 增加系统调用chrt
函数格式
s = chrt(long deadline)
函数功能
设置进程为实时进程并在deadline秒后结束。如果deadline为0,则将进程设置为非实时进程。设置成功返回0,否则返回1.
2 实现EDF(Earliest-Deadline-First)实时调度算法
EDF
deadline越近的进程越先执行
实时调度
设置进程的优先级,保证进程的优先级高于其他用户进程,以保证它的实时性。但要考虑不会影响系统进程的执行。
代码片段和文件信息
/* 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个文件信息
相关资源
- ajax实现用户登录注册
- 计算机专业实习总结心得
- FPGA\\基于FPGA的温度检测和PWM风冷系统
- 采用顺序存储实现栈的初始化、入栈
- 计算机图形学课程设计
- IDL语言实现滑动窗口
- 游程编码实现图像压缩
- Struts2+Hibernate实现的一个留言程序
- 修改版实现进程的软中断通信。要求
- 采用PCM编码原理及FPGA编程技术实现
- mini2440按键驱动实验--4个按键分别控制
- 用DSP2812实现的音乐播放器
- 操作系统实验1 加载用户程序的监控程
- 飞机订票系统 C实现 内含报告 绝对可
- 实现进程调度算法---动态优先级
- ios实现打地鼠的简单版游戏源码加注
- 一个简单双核CPU的verilog实现加中断、
- 基于单片机的心型灯设计.rar
- 进程外com组件实现win764位软件调用3
- 流水灯实现DSP
- 基于FPGA的2FSK调制器的实现--大学作业
- 使用log算子实现的图像边缘检测
- 两种方法实现:labview中4位16进制字符
- powerbuilder10.5通过调用FTP实现程序自动
- QTreeview实现搜索功能查找功能
- 练数成金的《推荐系统视频教程》完
- 21天实战人工智能系列:人工智能产品
- 职工工作量统计实验报告含源码
- 二次曲面拟合实现高程模型建立
- 实验报告心得体会通用版
评论
共有 条评论