时间片轮转多道程序运行原理

一、概述

  本文通过分析一个简单的时间片轮转多道程序的内核 mykernel,来理解操作系统是如何工作的。

  mykernel 是孟宁老师的一个开源项目,借助 Linux 内核部分源代码模拟存储程序计算机工作模型及时钟中断,添加与修改部分代码实现的(详情点 此处)。未加入进程管理功能的 mykernel,会在初始化后,周期性地执行时间中断处理程序。在实验楼虚拟机的终端输入以下指令(图形模式下),即可运行 mykernel 。运行时效果如下:


  可以看出,这个系统目前只是简单地不停输出“my_timer_handler here ”、“my_start_kernel here”等字样。通过查看源码,可以发现这些输出字符串分别位于 mymain.c 和 myinterrupt.c 中。只要在此基础上,再加入进程描述 PCB 和进程链表管理、进程切换等代码,一个可运行的小OS kernel 就完成了。下面便开始逐步实现这些功能(本文所有代码均由孟宁老师提供,笔者只分析其功能与实现原理)。

二、添加 PCB 描述信息

  为了实现进程管理,需要先引入进程块描述信息,我们将其放入一个新的头文件 mypcb.h 中。

/*
 *  linux/mykernel/mypcb.h
 *
 *  Kernel internal PCB types
 *
 *  Copyright (C) 2013  Mengning
 *
 */

#define MAX_TASK_NUM        4
#define KERNEL_STACK_SIZE   1024*8

/* CPU-specific state of this task */
struct Thread 
{
    unsigned long		ip;
    unsigned long		sp;
};

/* Processing Control Block */
typedef struct PCB
{
    int pid;
    volatile long state;	/* -1 unrunnable, 0 runnable, >0 stopped */
    char stack[KERNEL_STACK_SIZE];
    struct Thread thread;
    unsigned long	task_entry;
    struct PCB *next;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值