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 作业是用户提交任务的单位,操作系统进行处理

  • 相关阅读:
    Hibernate 再接触 事务隔离机制
    Hibernate 再接触 一级缓存 二级缓存 查询缓存
    Hibernate 再接触 性能优化
    Hibernate 再接触 HQL
    Hibernate 再接触 树状结构设计以及学生课程成绩表的设计
    DotNetBar.MetroTilePanel 样式、加载数据、获取数据
    C# superGridControl 样式设置、加载数据、获取数据
    system.data.oracleclient 需要 8.17 需要oracle客户端问题
    程序员必备
    LinQ to sql
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/5866490.html
Copyright © 2011-2022 走看看