操作系统工作小解

操作系统工作小解

20135224陈实 + 原创作品+ 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”

套用课上陈述内容:

计算机是如何工作的?(总结)——三个法宝

  • 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构;
  • 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能;
    • enter
      • pushl %ebp
      • movl %esp,%ebp
    • leave
      • movl %ebp,%esp
      • popl %ebp
    • 函数参数传递机制和局部变量存储
  • 中断,多道程序操作系统的基点,没有中断机制程序只能从头一直运行结束才有可能开始运行其他程序

核心代码分析:

 第一部分: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;
 } 这段代码很明显是C语言编写,内容只要是时间片的跳转即时钟中断函数,这里可以看见
if(time_count%1000 == 0 && my_need_sched != 1)这样一句,表示为时间片1000单位后跳转,在操作系统里有自己的定义单位这里
my_need_sched = 1;将标志设置为1,在后面内容用到 void my_process(void) 
void my_process(void)
if(i%10000000 == 0)
{
printk(KERN_NOTICE "this is process %d -\n",my_current_task->pid);
if(my_need_sched == 1)
。。。。。。小结:可以看出,这部分主要内容是C编写的LINUX内核时间片对于函数调度的c代码
第二部分嵌入式汇编代码:

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
 } 这部分主要注意的下面是标注主要语法在这不赘述注意的几点:数字代表的是标注下的内容,这里pcb是以链表的形式在前面定义好的每个进程独立的堆栈。每个进程独立的PCB即进程数据对应于
"=m" (prev->thread.sp),"=m" (prev->thread.ip)
  : "m" (next->thread.sp),"m" (next->thread.ip) 这些数据内容

总结

第一阶段:进程从用户态切换到内核态 第二阶段:中断处理 第三阶段:进程切换

操作系统本质上是一种软件,是实现交流的接口

时间: 2024-10-03 13:40:08

操作系统工作小解的相关文章

计算机如何工作小解

计算机如何工作小解 “20135224陈实 + 自己博客园 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 汇编代码如下: 基本理解工作过程如下: 根据汇编语言:在g函数中,开头语句都是创建堆栈起始语pushl,movl分别对应下图(下右图eax值应该是算过main与F之后的esp值+5,这里只做函数顺序理解) 对应f与main开头语大同小异: 在进行到语句subl时候,ESP下移,将要保留的数值5放入

一个简单的时间片轮转多道程序内核操作系统工作流程

一.操作系统工作概述 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以执行的基础: 中断.多道程序操作系统的基点. 二.代码分析 在上一篇博文<搭建OS kernel环境方法>的基础上进行时间片轮转多道程序的小os. 主要对mypcb.h,  mymain.c 和myinterrupt.c这三个文件进行分析. <pre name="code" class="cpp"><span style="

Linux内核设计(第二周)——操作系统工作原理

Linux内核设计(第二周)--操作系统工作原理 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.学习笔记总结 1.函数调用堆栈 (1).函数调用堆栈. 堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间. cpu内部已经集成好的功能,pop,push,enter-- 函数调用构架 传递参数,通过堆栈 保存返回值,%eax 提供局部变量空间 -- C语言编译器对堆栈

操作系统工作过程

朱秀秀 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 通过演示完成一个简单的时间片轮转多道程序内核代码,大致上了解了计算机操作系统的进程之间的切换原理,我的理解是:进程之间的切换时间要受到时间片的长短的影响,时间片越长,那么不同进程之间的切换就会相隔的时间越长,切换的频率就会下降,尤其是进程的启动与进程的切换,是操作系统管理进程中的重要步骤,下面这段代码是用来启动0进程的: p

操作系统(转)

1.什么是进程(Process)和线程(Thread)?有何区别? 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行. 进程

ucos实时操作系统学习笔记——操作系统在STM32的移植

使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只有几千行代码的操作系统,也没所有的代码都看,只是看了其中部分内容.自己还自不量力的尝试着去写过简单的操作系统,最后写着写着就被带到了ucos的设计思路上了,后来干脆就“copy”代码了,虽说对操作系统内核的理解有很大的帮助,但是很是惭愧啊,智力不够,对操作系统内核的设计者更加仰慕,O(∩_∩)O哈哈

操作系统简史

什么是操作系统? 可能很多人都会说,我们平时装的windows7 windows10都是操作系统,没错,他们都是操作系统.还有没有其他的? 想想我们使用的手机,Google公司的Android系统,Apple公司笔记本上的的MacOSX.IPhone的IOS,他们都是操作系统. 那么我们想想,操作系统都可以做什么? 我们买来电脑的后第一件事情就是安装操作系统,有的电脑则在我们买来的时候已经安装好了操作系统,比如说品牌机(Dell.HP.lenovo). 我们可以在操作系统上通过安装程序来看视频,

斯坦福大学操作系统

Pintos-斯坦福大学操作系统Project详解-Project1 前言:  本实验来自斯坦福大学cs140课程,只限于教学用途,以下是他们对于Pintos系统的介绍:  Pintos is a simple operating system framework for the 80x86 architecture. It supports kernel threads, loading and running user programs, and a file system, but it

【操作系统常考知识总结】-转

1.进程是并发过程中程序的执行过程 2.进程的特征:结构特征动态性并发性独立性异步性 3.临界区指在每个进程中访问临界资源的那段代码 4,现在操作系统中申请资源的基本单位是进程,在CPU得到执行的基本单位是线程,进程是由程序段.数据段.PCB组成的 5,对临界资源应采取互斥访问方式来实现共享 6,P.V操作是一种低级进程通信原语 7,对于记录性信号量,在执行一次P操作时,信号量的值应当减1,当其值为小于0时进程应阻塞:在执行V操作时,信号量的值应当加1:当其值小于等于0时,应唤醒阻塞队列中的进程