zoukankan      html  css  js  c++  java
  • 操作系统基础

    C语言的内存分布

    代码区 (text 静态分配)

    数据区(data,全局静态变量,BBS)

    堆(heap,使用new、delete 或者malloc,free,低地址到高地址)动态分配

    栈(stack,生长方向:高地址到低地址,程序运行时存在的空间)自动分配

    stack

    heap

    BBS

    Static data

    text

    描述空间、内存寻址单位:字节Byte

    内存—>CPU

    操作系统的复杂来源于函数各种各样的跳转:

    函数调用函数、Jump的区别

    参数入栈、局部变量入栈、返回地址

    病毒:大量存在跳转!

    代码数据区:编译器自动分配大小,在运行前已经知道大小。

    至于堆栈的大小在运行时进行分配

    clip_image001

    clip_image002

    clip_image003

    让操作系统找到代码和数据的存储位置

    e_ident 说明类型

    e_entry 指明运行地址

    Abstract Machines 抽象机器

    Machine Models (data、control)

    Char、int、float、double、struct、array、pointer

    loops、conditionals、switch、proc.call、proc.return

    Assembly

    Byte、contiguous byte allocation、address of iniaial byte、call、ret

    运行的下一条指令,也就是跳转! 控制指令流寄存器,改变了寄存器,控制CPU状态的寄存器(状态寄存器)

    系统通过寄存器来了解程序运行是否正常。命令寄存器、数据寄存器、状态寄存器

    操作系统让其他的程序能够正常的运行,当发生异常时能够及时清理,除此之外,在多个程序同时运行时,操 作系统要协调程序之间的运行,因此各种寄存器十分的重要!

    跳转是理解操作系统的核心部分之一。

    程序的运行结构——硬件结构和可执行文件

    clip_image004

    clip_image005

    clip_image006

    clip_image007

    CPU控制外设设备

    方式一:不断地查看外设设备的寄存器状态

    方式二:以中断进行CPU和设备的交互

    CPU给DMA指令,DMA使外设信息写入内存中

    Interrupt Controller 中断控制器

    外设给中断控制器一个信号,然后通过中断控制器给CPU一个信号。外部设备联接在中断控制器上面。当外设做完工作如何才能告诉CPU该设备的工作已经完成。此时应当由外设产生一个中断,但是CPU只有一个引脚,无法判断出是哪一个设备发出的中断。因此添加上中断控制器,外设产生一个中断,接受方不是CPU而是中断控制器,孔段控制器记录下外部设备的编号,用以区分不同的外设。然后通过中断控制器给CPU一个中断信号并且可以指出此时的中断是哪一个设备产生的(使用中断控制器记录下来的外设编号)。也可以说没有中断控制器就没有操作系统!

    clip_image008

    先看一下CPU的样子:

    clip_image009

    看一下它伸出来的引脚:

    clip_image010

    注意用红圈标注的两个引脚,这两个就是80386处理器为中断留出的两个引脚。其中INTR是可屏蔽中断输入口,NMI是不可屏蔽中断输入口。

    那么中断是如何输入给处理器的呢?那么多外部设备,而这只有一个引脚(暂时只考虑可屏蔽中断),这里就需要为CPU配备一个管理中断的秘书——可编程中断控制器PIC。这个秘书需要干哪些活呢?外部设备的中断都从它来进入中央处理器,所以它负责从外设接收中断信号,并根据优先级向CPU发起中断请求。最开始的这个PIC角色是一个代号为8259A的芯片在进行扮演,这货长这样:

    clip_image011

    clip_image012

    其中IR0-IR7共8个引脚负责连接外部设备, 8259A PIC的每个IR口都连接着一条IRQ线,用于接收外设的中断信号。INT负责连接CPU的INTR引脚,用于向CPU发起中断请求。通常情况下,使用两片8259A芯片进行级联,一片连接CPU,称为主片,另一片连接到主PIC的IR2引脚,称为从片,这样总共就可以连接8+7=15个外设了。如下图所示:

    clip_image013

    在8259A中,默认情况下的优先级是主片IR0的中断请求优先级最高,主片IR7最低,从片IR0-7所有中断请求优先级都相当于IR2。所以IRQ线的优先级由高到低次序为IRQ0,IRQ1,IRQ8-15,IRQ3-7。这是默认情况,可以通过编程改变。

    在8259a芯片内部有几个重要的寄存器:

    中断请求寄存器: IRR,8bit,对应IR0-IR7,当对应引脚产生中断信号时,该bit位置1。

    中断服务寄存器: ISR,8bit,对应IR0-IR7,当对应引脚的中断正在被CPU处理时,该bit位置1。

    中断屏蔽寄存器: IMR,8bit,对应IR0-IR7,当对应位为1时,表示屏蔽该引脚产生的中断信号。

    还有一个中断优先级判决器: PR,当中断引脚有信号时,结合这次产生中断的IRQ号和ISR中记录的当前正在处理的中断信息,根据优先级来决定是否把这个新的中断信号报告给CPU,以此来产生中断嵌套。

    下面是这15条IRQ线分别连接的外设:

    clip_image014

    现在我们来看看这个秘书是如何和CPU之间进行协调工作的。

    现在假设我们敲击了一个键盘按键,键盘有中断事件产生,这一事件通过IRQ1这根线告知了主PIC,主PIC经过内部一些判断处理后通过INT发送电信号到CPU侧的INTR。CPU在执行完当前的指令后,检查到INTR有信号,说明有中断请求来了,再检查eflags中的IF不为零,表示当前允许中断,则发送信号给PIC的-INTA,告诉它把本次中断的向量号发送过来。主PIC收到-INTA管脚上的信号后,通过D0-D7引脚,输出此次中断的中断向量号到数据总线(这里简化了交互过程,实际上有两次INTA信号的发送)。CPU拿到这个号后,就可以从IDT中寻找中断服务例程(ISR)进行处理了,后面的事大家都知道了。

    那PIC中的中断向量号是怎么来的呢?各个IRQ是如何对应到IDT中的各个项呢?这里就利用了中断控制器的可编程性来决定的了。

    PIC全称为可编程中断控制器,那么它的可编程体现在哪些方面呢?参考资料2《i8259A中断控制器分析一》一文有比较详细的描述,大体包括编程指定主从片的IRQ线对应的中断在IDT表中的中断向量号、8259a中断控制器的中断方式、优先级方式、中断嵌套方式,中断屏蔽方式、中断结束方式等等,这些都可以由操作系统编程指定。

    clip_image015

    转载博客地址 http://www.cnblogs.com/xuanyuan/p/5506508.html

    下图是Unix家谱图:

    clip_image016

    μCos操作系统

    桌面系统:交互

    Real-time systems实时系统

    硬实时和软实时

    确定的固定时间限制

    clip_image017 作业是用户提交任务的单位,操作系统进行处理

  • 相关阅读:
    JZOJ 3034. 【NOIP2012模拟10.17】独立集
    JZOJ 3035. 【NOIP2012模拟10.17】铁轨
    JZOJ 1259. 牛棚安排
    数位DP JZOJ 3316. 非回文数字
    JZOJ 3046. 游戏
    JZOJ 3013. 填充棋盘
    debian 安装oracle提供的java8
    java 汉字转拼音 PinYin4j
    debian ssh设置root权限登陆 Permission denied, please try again
    java并发下订单生成策略
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/5866490.html
Copyright © 2011-2022 走看看