操作系统是如何工作的?

秦鼎涛   《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

一、实验二:完成一个简单的时间片轮转多道程序内核代码(实验楼截图)

二、进程的启动和进程的切换机制

1、多道进程的处理采用了中断机制,利用cpu和内核代码来实现保存现场和回复现场。本次课程的实验平台模拟了一个时间片轮转多道程序的系统。

2、时间片轮转多道程序代码:

/*
  * linux/mykernel/myinterrupt.c
  *
  * Kernel internal my_timer_handler
  *
  * Copyright (C) 2013 Mengning
  *
  */
  #include <linux/types.h>
  #include <linux/string.h>
  #include <linux/ctype.h>
  #include <linux/tty.h>
  #include <linux/vmalloc.h>
   
  #include "mypcb.h"
   
  extern tPCB task[MAX_TASK_NUM];     
  extern tPCB * my_current_task;                 
  extern volatile int my_need_sched;    
  volatile int time_count = 0;
   
  /*
  * Called by timer interrupt.
  * it runs in the name of current running process,
  * so it use kernel stack of current running process
  */
  void my_timer_handler(void)
  {
  #if 1
  if(time_count%1000 == 0 && my_need_sched != 1)
  {
  printk(KERN_NOTICE ">>>my_timer_handler here<<<\n");
  my_need_sched = 1;
  }
  time_count ++ ;
  #endif
  return;
  }
   
  void my_schedule(void)
  {
  tPCB * next;
  tPCB * prev;
   
  if(my_current_task == NULL
  || my_current_task->next == NULL)
  {
  return;
  }
  printk(KERN_NOTICE ">>>my_schedule<<<\n");
  /* schedule */
  next = my_current_task->next;
  prev = my_current_task;
  if(next->state == 0)/* -1 unrunnable, 0 runnable, >0 stopped */
  {
  /* switch to next process */
  asm volatile(
  "pushl %%ebp\n\t" /* save ebp */
  "movl %%esp,%0\n\t" /* save esp */
  "movl %2,%%esp\n\t" /* restore esp */
  "movl $1f,%1\n\t" /* save eip */
  "pushl %3\n\t"
  "ret\n\t" /* restore eip */
  "1:\t" /* next process start here */
  "popl %%ebp\n\t"
  : "=m" (prev->thread.sp),"=m" (prev->thread.ip)
  : "m" (next->thread.sp),"m" (next->thread.ip)
  );
  my_current_task = next;
  printk(KERN_NOTICE ">>>switch %d to %d<<<\n",prev->pid,next->pid);
  }
  else
  {
  next->state = 0;
  my_current_task = next;
  printk(KERN_NOTICE ">>>switch %d to %d<<<\n",prev->pid,next->pid);
  /* switch to new process */
  asm volatile(
  "pushl %%ebp\n\t" /* save ebp */
  "movl %%esp,%0\n\t" /* save esp */
  "movl %2,%%esp\n\t" /* restore esp */
  "movl %2,%%ebp\n\t" /* restore ebp */
  "movl $1f,%1\n\t" /* save eip */
  "pushl %3\n\t"
  "ret\n\t" /* restore eip */
  : "=m" (prev->thread.sp),"=m" (prev->thread.ip)
  : "m" (next->thread.sp),"m" (next->thread.ip)
  );
  }
  return;
  }
 

三、总结:

  课程中提到了计算机工作的三大法宝:存储程序计算机工作模型、堆栈、中断。

  • 存储程序计算机工作模型,简单的说就是CPU解释并执行计算机指令,Memory用来存储数据和程序。
  • 堆栈机制(函数调用堆栈),在机器语言和汇编语言的时候并不那么重要,后来有了高级语言,尤其是函数调用使得堆栈成为计算机工作的重要基础;
  • 中断,引入中断机制使内核可以处理硬件外设I/O。中断来源有I/O请求、时钟以及系统调用。中断可以使计算机同时处理多个程序,提高了计算机效率。
时间: 2024-08-27 20:30:38

操作系统是如何工作的?的相关文章

Linux第二周学习总结——操作系统是如何工作的

LINUX内核分析第一周学习总结——操作系统是如何工作的 黄韧(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [知识点总结] (一)计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能:函

操作系统是如何工作的

实验2:运行并分析一个精简的操作系统内核,理解操作系统是如何工作的 姓名:李冬辉 学号:20133201 注: 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数

linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码

计算机如何工作 三个法宝:存储程序计算机.函数调用堆栈.中断机制. 堆栈 函数调用框架 传递参数 保存返回地址 提供局部变量空间 堆栈相关的寄存器 Esp 堆栈指针  (stack pointer) Ebp 基址指针 (base pointer) 堆栈操作 Push:pop Ebp用作记录当前函数调用基址- 其他关键寄存器   中断 Call指令:1.将eip中下一条指令的地址A保存在栈顶:2.设置eip指向被调用程序代码开始处 1.Call xxx 2.进入xxx pushl %ebp mov

20135327郭皓——Linux内核分析第二周 操作系统是如何工作的

操作系统是如何工作的 上章重点回顾: 计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能: enter pushl %ebp movl %esp,%ebp leave movl %ebp,%esp popl %ebp 函数参数传递机制和局部变量存储 中断,多道程序操作系统的基点,没有中断机制程序只能

操作系统是如何工作的--------Linux 实验二

操作系统是如何工作的? 作者:20135108 李泽源 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 mykernel实验指导(操作系统是如何工作的) 运行并分析一个精简的操作系统内核,理解操作系统是如何工作的 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 然后cd mykernel 您可以看到qe

Linux内核分析——操作系统是如何工作的

姓名:王晨光 学号:20133232 王晨光+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程的启动和切换源代码及分析 typedef struct PCB用于表示定义了一个进程,定义了进程管理相关的数据结构.同时也设置了用于保存EIP和ESP的数据类型. 下列代码为mymain.c部分代码: void __init my_start_kernel(void) { int pid

操作系统是如何工作的————一个精简的操作系统内核(20135304 刘世鹏)

操作系统是如何工作的————一个精简的操作系统内核 作者:20135304 刘世鹏 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验过程 使用实验楼虚拟机打开shell,加载实验所需linux内核,执行搭建好的系统 cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 一直在执行mystartkernel,交替执行

魏昊卿——《Linux内核分析》第二周作业:了解操作系统是怎样工作的

魏昊卿——<Linux内核分析>第二周作业:了解操作系统是怎样工作的 一.实验部分 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain.c和myinterrupt.c 使用自己的Linux系统环境搭建过程参见mykernel,其中也可以找到一个简单的时间片轮转多道程序内核代码 mymain.c myinterr

Linux内核分析之操作系统是如何工作的

在本周的课程中,孟老师主要讲解了操作系统是如何工作的,我根据自己的理解写了这篇博客,请各位小伙伴多多指正. 一.知识点总结 1. 三个法宝 存储程序计算机:所有计算机基础性的逻辑框架. 堆栈:高级语言的起点,函数调用需要堆栈机制. 中断机制:多道系统的基础,是计算机效率提升的关键. 2. 函数调用堆栈 堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间,即CPU内已经集成好了很多功能. 堆栈含以下元素: 函数调用框架 传递参数 保存返回地址(%eax) 提供局部变量空间 等等 C语言编译器

WEEK TWO(2.29——3.6)操作系统是如何工作的?

[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK TWO(2.29——3.6)操作系统是如何工作的? SECTION 1 函数调用堆栈 1.总结上一讲 计算机是如何工作的? 存储程序计算机工作模型(冯诺依曼结构),是各种类型计算机的一个框架: 堆栈在早期是没有的,它是高级语言的起点(函数调用堆栈) 中断机制(多道系统的基础,也是计算机效率提升的关键——否则的画计算机能