首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【程序的编译(预处理操作)+链接】

程序的编译(预处理操作)+链接 1. 程序的翻译环境和执行环境 2. 详解编译+链接 2.1 翻译环境&&编译本身分成的几个阶段 2.2 运行环境 3....详解编译+链接 2.1 翻译环境&&编译本身分成的几个阶段 组成一个程序的每个源文件通过编译过程分别转换成目标代码。...每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。...链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中。...符号表最终会在链接中从符号表内部的符号地址从而引用出程序中的函数,因此符号表的重要性是显而易见的。

55700

保护模式下的中断和异常(下) -- 软件实战篇

引言 上一篇文章中,我们详细介绍了保护模式下的中断和异常以及他们的硬件基础结构 — 可编程中断控制器 8259A,以及他的初始化和中断的屏蔽与打开: 保护模式下的中断和异常(上) — 硬件原理篇 现在,...8259A 的初始化代码略有不同,区别在于,16位实地址模式下,中断向量长度是4字节。...另外,虽然在实地址模式的默认情况下,程序只使用主 8259A 芯片,但仍然必须设置为级联模式,而不能将级联位设置为 1,虽然我在一些书中看到,在回跳时,主 ICW1 设置为了 17h,即 single...分段 详解 32 位保护模式与内存分段机制 进军保护模式 保护模式进阶 — 再回实模式 实战局部描述符表 LDT 利用调用门实现特权级间跳转(上) — 原理篇 利用调用门实现特权级间跳转(下) — 实战篇...中断与异常 保护模式下的中断和异常(上) -- 硬件原理篇 14.

1.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【汇编语言】内中断(二) —— 安装自己的中断处理程序:你也能控制0号中断

    编程处理0号中断 1.1 效果演示 现在我们考虑改变一下0号中断处理程序的功能,即重新编写一个0号中断处理程序,它的功能是在屏幕中间显示“overflow!”然后返回到操作系统,如下图所示。...可以利用中断向量表中的空闲单元来存放我们的程序。 一般情况下,从0000:0200至0000:02FF的256个字节的空间所对应的中断向量表项都是空的,操作系统和其他应用程序都不占用。...1.5 从CPU的角度看中断处理程序 现在,我们在反过来从CPU的角度看一下,什么是中断处理程序?...0号中断的中断处理程序; (2)程序中安装do0 的代码执行完后,do0的代码被从程序的代码段中拷贝到0:200处。...,即do0 的代码,就变成了0号中断的中断处理程序。

    10210

    ARM Linux的中断服务程序工作在ARM的IRQ模式吗?

    大家都知道,ARM有IRQ, FIQ, USR,SVC,ABORT等各种模式。当系统收到IRQ的时候,会进入ARM的IRQ模式。...那么,ARM Linux各种驱动的中断服务程序工作在ARM的IRQ模式吗? 答案是否定的。 我们加一段汇编来读CPSR: ? 然后我们随便找一个ARM Linux的中断服务程序去打印CPSR: ?...然后我们发现打印出来的值是: cpsr:40000193 低8位的二进制是10010011 那么对应ARM CPSR的查询,可以看出CPU处于ARM的SVC模式(低5位是10011),而且I bit被设置...(第7位是1),所以是禁止IRQ的。...模式表: ? 可见,ARM Linux最初进入IRQ模式后,比较快速地从IRQ模式切换到了SVC模式,但是这个时候,并没有使能CPSR的I bit,所以仍然是禁止其他中断嵌套进入的。

    3.1K20

    RISC-V 学习篇之特权架构下的中断异常处理

    O 的功能 处理器通常大部分时间都运行在权限最低的模式下 处理中断和异常时会将控制权移交到更高权限的模式 RISC-V 提供的特权指令有如下几个: sret : 监管者模式下的异常和中断返回 mret...---- 机器模式下的异常处理 八个控制状态寄存器(CSR)是机器模式下异常处理的必要部分: mtvec(Machine Trap Vector)它保存发生异常时处理器需要跳转到的地址。...下面以一个时钟中断处理程序为例,进行讲解: 该时钟中断处理程序只对时间比较器执行了递增操作,然后继续执行之前的任务 更实际的时钟中断处理程序可能会调用调度程序,从而在任务直接进行切换 我们这个时钟中断处理程序是非抢占的...---- 默认情况下,发生所有异常(不论在什么权限模式下)的时候,控制权都会被移交到 M 模式的异常处理程序。但是 Unix 系统中的大多数异常都应该进行 S 模式下的系统调用。...例如: mideleg[5]对应于 S 模式的时钟中断,如果把它置位,S 模式的时钟中断将会移交 S 模式的异常处理程序,而不是 M 模式的异常处理程序。

    3.8K101

    保护模式下的中断和异常(上) -- 硬件原理篇

    如何制作自己的操作系统 除了 10H 中断,我们还使用过 BIOS 21H 中断,用来让实地址模式的程序退出,以及使用 15H 中断获取物理内存的信息: 保护模式进阶 — 再回实模式 实战分页机制实现...但你有没有发现,这些中断都是在实地址模式下使用的,一旦进入保护模式,我们就再没有使用过中断功能,那么,在保护模式中,我们是否还可以像实地址模式中一样,通过 int 指令触发 BIOS 中断呢?...中断 正常的程序运行,除了发生异常外,即便是发生跳转,也都是程序主动的行为,但有时,处理器外部的硬件事件,比如外围设备的请求突然到来等都是随机发生的,我们可以预先设定事件发生时执行的程序,但不能预知事件何时到来...结语 本文我们详细介绍了保护模式下的中断和异常与实地址模式下的不同之处,以及如何通过程序操作硬件 — 可编程中断控制器初始化、屏蔽或打开中断的响应,这些是理解硬件系统、操作系统的基础知识,也是硬件的部分...本文涉及的实际开发内容比较少,你是否已经迫不及待的想要立即尝试一下如何通过程序让我们能够在保护模式下触发和响应中断呢?敬请期待下一篇文章中的实战吧。 5.

    1.1K20

    Linux系统驱动之GIC驱动程序对中断的处理流程

    : git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网驱动大全 GIC驱动程序对中断的处理流程...一级中断控制器处理流程 2. 多级中断控制器处理流程 参考资料: linux kernel的中断子系统之(七):GIC代码分析 使用逐步演进的方法才能形象地理解。 1....发生UART中断时 程序从GIC中读取寄存器知道发生了32号中断,通过GIC irq_domain可以知道virq为16 调用irq_desc[16]中的handleA函数,它的作用是调用action...多级中断控制器处理流程 假设GPIO模块下有4个引脚,都可以产生中断,都连接到GIC的33号中断 GPIO也可以看作一个中断控制器,对于它的4个中断 对于GPIO模块中0~3这四个hwirq,一般都会一下子分配四个...按下KEY时: 程序从GIC中读取寄存器知道发生了33号中断,通过GIC irq_domain可以知道virq为16 调用irq_desc[16]中的handleB函数 handleB

    2.2K20

    x86体系早期的实模式下的内存分段的地址映射

    实模式:程序员可以直接在物理地址上进行编写程序,此时还没有操作系统进行内存的管理。 实模式下的CPU架构为:8086,16位数据总线,20位的地址总线。...8086进行了这样的规定:物理内存的地址必须是16的倍数,也就是说经过分段,段大小在这个区间[16, 2^16=64k]。...这样做的好处是,地址是16的倍数意味着地址的二进制形式其第四位是0,这样一来,多余的4位0可以不用表示,那么就可以用16位的数据总线来传输20位的物理内存地址。...实模式内存分段的管理:由于段寄存器都是16位的,在实际由CPU发出的地址是类似这样的,DS的方式进行物理内存的访问。...其中,DS的在内存的一个段上的偏移量)。

    47620

    【C】程序的编译链接预处理详解(C语言内功,精炼,基础)

    前言:大家好,这里是YY;此篇博客主要是程序的编译/链接/预处理详解的知识点;包含【程序的翻译环境和执行环境】【编译和链接的过程】【编译的几个阶段】【运行环境】【预定义符号】【define/undef...一.程序的翻译环境和执行环境 在ANSI C的任何一种实现中,存在两个不同的环境 翻译环境,此过程中源代码转换为可执行的机器指令 执行环境,它用于实际执行代码 二.编译和链接的过程 三.编译的几个阶段...1.形成符号表的过程: 2.段表的合并和重定位随后进行链接: 四.运行环境 程序执行的过程: 程序必须载入内存中。...程序的执行便开始,接着调用main函数 开始执行程序代码,这个时候程序将使用一个运行的堆栈,存储函数的局部变量和返回值。...define的两个用法: 定义符号(标识符) 定义宏 undef:用于移除宏定义 1.define定义符号时,语法要求: 不要加上 ; 一般情况下大写 2

    17610

    默认模式网络下的自动化信息处理

    利用认知灵活性任务,研究发现DMN的大脑区域在这种 “自动模式”的行为中起着至关重要的作用。其能够使得个体在可预见的环境下,快速地进行恰当的回应。...这些发现表明了人脑DMN的基于记忆的“自动模式”,这项研究可能对我们目前对健康和适应性大脑处理的理解有重要意义。...总的来说,这些发现暗示了DMN参与了个体的自动信息处理过程。...为了验证不同网络在不同任务下与全脑的交互,研究构建了这两个网络的FC,研究首先测试了DAN网络在获取和应用下的WCST, 与应用阶段相比,DAN在获取阶段中,与中/颞上、下/上/上顶叶的连接发生了改变(...在认知灵活性任务的获取和应用阶段,背注意力和默认模式网络的功能连接模式发生了改变。两个网络的连接映射在两个阶段的任务。

    1K80

    LINUX: 在不重启各自socket程序情况下, 断开ESTAB的TCP链接

    而这次想讨论的是: 在不重启各自socket程序情况下, 将ESTABLED链接断开 ???..., 我猜测是因为这个报文还没到tcpdump就已经被iptables处理并直接返回了.....上面的方法所用到就是最后一种标志:RST重置链接 所以总得而言, iptables的DROP行为, 能够阻止链接的建立, 但是对于已经建立起来的链接, 顶多只能阻止数据的传输, 但是不能断开链接, 链接的断开应该只有下面几种可能...: socket 的主动close, 也就是发送 fin报文 ( 应用层程序或者内核 ) TCP链接的超时自动断开 ( 这个过程可能会比较耗时 ) 伪造报文发送RST 除了上面的条件, 还有一个点需要注意的..., 那就是: 在某些情况下, 哪怕对方关闭了, 但是自己也是无法感知的, 还是需要send一次, 通信一次, 触发了socket的错误, 例如 Connection reset by peer.

    2.5K41

    服务器端Go程序对长短链接的处理及运行参数的保存

    对长、短连接的处理策略(模拟心跳) 作为一个可能会和很多Client进行通讯交互的Server,首先要保证的就是整个Server运行状态的稳定性,因此在和Client建立连接通讯的时候,确保连接的及时断开非常重要...通过这样设定,每个和Server通讯的Client连接时长最长也不会超过10s了~~ 搞定短连接后,接下来就是针对长连接的处理策略了~~ 作为长连接,由于我们往往很难确定什么时候会中断连接...,因此并不能像处理短连接那样简单粗暴的设定一个timeout就可以搞定,而在Golang的net包中,并没有针对长连接的函数,因此需要我们自己设计并实现针对长连接的处理策略啦~ 针对socke长连接...close(mess) } func Log(v ...interface{}) { log.Println(v...) } 这样,就可以成功实现对于长连接的处理了...因此常见的做法都是将Server运行中可能会频繁变更的变量、数值写入配置文件中,这样直接让程序从配置文件读取参数,避免对代码频繁的操作。

    1.5K70

    Go 常见并发模式实现(一):调度后台处理任务的作业程序

    关于 Go 语言并发编程基本概念和 Goroutine、Channel 以及锁机制的使用,学院君在 Go 入门教程并发编程章节已经详细介绍过了,这里主要演示通过并发编程在 Go 程序中实现一些常见的并发模式...首先,我们来看如何开发需要调用后台处理任务的程序,这个程序可能会作为 Cron 作业执行,或者在基于定时任务的云环境(iron.io)里执行。...无人值守的、面向任务的并发模式程序:调用 Start() 方法启动作业运行器后,会通过协程异步运行作业中的所有后台处理任务,然后通过 select 选择语句判定作业程序是运行结束正常退出、还是收到系统中断信号退出...我们可以编写一个入口程序 runner.go 来调用上述调度后台处理任务的作业程序: package main import ( "fmt" "log" "os" "test...由于系统超时时间是 3s,而后台处理任务总耗时是3s,因此程序整体运行时间是超过 3s 的,所以显示超时退出,如果我们将系统超时时间延长至 5s,则会正常退出。 (全文完)

    2K20

    解决win7系统不支持16位实模式汇编程序DOS运行的问题

    这学期学习了汇编,在自己电脑上发现,win7的dos不支持16位实模式。 对编程来说,不能运行程序是致命的。...在经过网上搜集资料后,得到一种解决办法--使用dosbox软件运行 dosbox简单说,就是一个dos模拟程序,支持16位实模式。...1.首先下载一个dosbox安装程序并安装,下面给出地址 http://sourceforge.net/projects/dosbox/files/dosbox/0.73/DOSBox0.73-win32...我的程序在c盘,大家可以根据自己的需要设置; 4.运行dosbox,如果看到z:\>mount c c:\,,,说明目录设置成功; 5.接下来就可用正常dos的操作运行16位的古老汇编了; 当然解决方式不局限于这一种...,也看到可以用虚拟机等,但是我在xp虚拟机里好像也出现有类似问题,只能用上面的方法解决,不知道为什么,有知道的朋友可以告诉我。

    1.4K80

    (93) 函数式数据处理 (下) 计算机程序的思维逻辑

    上节初步介绍了Java 8中的函数式数据处理,对于collect方法,我们只是演示了其最基本的应用,它还有很多强大的功能,比如,可以分组统计汇总,实现类似数据库查询语言SQL中的group by功能。...(Function.identity(), t->t.length())); 希望得到字符串与其长度的Map,但由于包含重复字符串"abc",程序会抛出异常。...这种情况下,我们希望的是程序忽略后面重复出现的元素,这时,可以使用另一个toMap函数: public static Collector<T, ?...分组 分组类似于数据库查询语言SQL中的group by语句,它将元素流中的每个元素分到一个组,可以针对分组再进行处理和收集,分组的功能比较强大,我们逐步来说明。...至此,关于Java 8中的函数式数据处理Stream API,我们就介绍完了,Stream API提供了集合数据处理的常用函数,利用它们,可以简洁地实现大部分常见需求,大大减少代码,提高可读性。

    1.2K80

    写一个Loader引导加载程序

    检测硬件信息 由于BIOS自检得到的大部分的信息只能在实模式下获取,因此我们需要在进入内核之前,把这些信息读取出来,传递给内核程序来使用。...切换处理器模式 要使得操作系统运行在64位的环境下,就需要loader进行切换。 最开始,BIOS运行在实模式,提供20位的寻址空间。...进入Big Real Mode Big Real Mode虽然还是在实模式下运行,但是fs寄存器拥有32位的寻址空间。我们将来要通过这种方式,来把内核程序转移到1MB地址上。...但是,需要注意的是,我们不能在实模式下再次对fs寄存器赋值,否则它就会失去这种32位寻址能力。...这样能使得fs寄存器在实模式下获得大于1MB的寻址能力。

    69420

    《一个操作系统的实现》笔记(3)--中断和IO保护

    ---- 中断和异常机制 有时候普通的程序流必须可以被要求快速反应的处理事件中断。电脑提供了一个称为中断的结构来处理这些事件。 外部中断由CPU的外部引起。...例如:当一个鼠标移动了,硬件鼠标中断现在的程序来处理鼠标移动(移动鼠标,等等)。中断导致控制权转移到一个中断处理程序。中断处理程序是处理中断的程序。每种类型的 中断都分配了一个中断号。...由中断指令引起的中断称为软中断。DOS使 用这些类型的中断来实现它的API。 许多中断处理程序当它执行完成时,将控制权返回给被中断的程序。它 们恢复寄存器,里面的值与中断发生之前的值相同。...因此,被中断的程序 就像没有任何事情发生一样运行(除了它失去了一些CPU周期)。 在实模式下能用的BIOS中断在保护模式下已经不能用了,实模式下的中断向量表被保护模式下的IDT所代替。...中断或异常发生时的堆栈 ? ---- 保护模式下的I/O 保护模式下对I/O做了限制,用户进程如果不被许可是无法进行I/O操作的。主要通过IOPL和I/O位图来实现。

    90160

    软件运行机制及内存管理

    相应的,工作在实模式下的操作系统,我们叫实模式操作系统;工作在保护模式下的操作系统,我们叫保护模式操作系统。...实模式下的内存管理 在实模式操作系统下,所有软件包括操作系统本身,都在同一个物理地址空间下。在 CPU 看来,它们是同一个程序。操作系统如何分配内存?至少有两种可行的方法。...所谓中断,是 CPU 响应硬件设备事件的一个机制。当某个输入输出设备发生了一件需要 CPU 来处理的事情,它就会触发一个中断。...中断机制远不止是函数向量表那么简单。比如中断会有优先级,高优先级中断可以打断低优先级中断,反之则不能。 那么,在实模式下,操作系统如何运行外置存储(比如硬盘)上的软件?...因为它毕竟实质上是一个程序被拆分为很多个软件(程序代码片段),实现了程序代码片段的动态加载而已。 保护模式下的内存管理 但实模式有两个问题。 其一是安全性。

    1.1K30

    ZYNQ XC7Z020的PL PS中断驱动程序编写测试(linux4.14版本下)

    程序思路是按键产生中断,按键是直接连到pl端的,驱动产生异步通知,应用开始往BRAM写数据,然后再读取数据(阻塞读取),均打印出来比较 Vivado中增加BRAM和中断 这里只写我增加的部分,大家试验可以随便找一个可运行的程序在其基础上修改即可...,上一级中断是intc,中断号需要查手册,第11个中断号(本文使用)是86,减去32(前面其他功能的中断),是54, 1表示的是中断触发形式,上升沿触发 中断程序 中断程序如下 #include <linux...* @param - fd : 文件描述符 * @param - filp : 要打开的设备文件(文件描述符) * @param - on : 模式 * @return...0 read = 1 read = 2 read = 3 read = 4 read = 5 read = 0 read = 0 read = 0 read = 0 read = 0 通过printk的数据可以看出中断触发的数据处理流程如下...第三步:应用程序的异步通知函数my_signal_fun; 第四步:完成之前的阻塞读取函数read(fd, str, 10);

    1.6K30
    领券