在学习数据结构和操作系统的有关知识,系统调用的基本原理是在系统的中断列表中指定了各个中断人入口地址,给出中断号后操作系统在中断
向量表里面找到入口执行,现代的计算机为了保证内核的稳定性对任务区分状态即user mode(0)kernel mode(1),当用户态的任务请求执行系统调用的
时候进入trap转换状态。系统为了避免用户进程进入无限循环和长时间等待I/O时系统瘫痪,在操作系统将系统控制权限转让给用户时一般会设置一个
timer,timer时间到了以后就会将控制权给系统,系统进行重新CPU scheduling。在学习的同时我在虚拟机上进行试验,给linux系统加上自己添加进内
核的系统调用。
同时学习到了如系统进程调度的各种算法,如FCFS,SJF,RR,Preemptive Priority等。为了理解操作系统进程调度的原理我尝试在我的电脑上自己
写一个程序,使各个CPU(双核四线程模拟四核)的使用率稳定在50%,目前只能达到如下效果:
即四核系统,我指定程序运行在的第一个CPU上使第一个CPU的使用率即空闲比达到峰值附近,具体的做法是计算出CPU1秒钟能够执行指令数,然后
在一个循环里面不停的执行一个自增语句(转换成汇编语言大概需要5个指令周期),然后让线程挂起相应的时间,使得执行指令的时间和挂起的时间大
致相当,然后由于windows的调度时间片大概是10ms,然后按比例缩小得到如下代码:
while (true){ for (i = 0; i < 5000000; i++) ; System.Threading.Thread.Sleep(10); }