OS慕课选择题
OS慕课选择题本文请在电脑端查看,手机端会出现无法适应屏幕大小情况
编译原理14-ir-control
中间代码生成——控制流语句的翻译 II如何生成更短、更高效的代码?先看我们已经实现的两个示例
在我们生成的代码中,会出现多余的br指令
解决方法
直接用布尔表达式改变控制流
使用控制流跳转间接表明布尔表达式的值
父节点为子节点准备跳转指令的目标标签
子节点通过继承属性确定跳转目标
具体实现继承属性 B.true B.false S.next 指明了控制流的跳转目标
$P \rightarrow S$
S.next 为语句 S 指明了跳出S的目标
$S \rightarrow assign$
代表了表达式的翻译,包括数组引用
IF 语句
红线框出来的的语句,在理解上应该拆分为两句话,即
B.false = S.next,即B为false时,goto S.next
S1.next = S.next,即S1执行完,goto S.next
EXAMPLE1234if(true)//B //S1 if(false)//B11 assign//S11
S.next = L0B.true = L1B.false = S1.next = S.next = L0B11. ...
Compilers_Lab4_准备工作
Compilers_Lab4_准备工作在我们进行Lab4的环境配置时,完成LLVM与Clang的安装后,文档引入javacpp中与LLVM相关的包,是在pom.xml文件中添加依赖,然而我们的lab中并不存在这样的文件,所以将解决方法记录在博客上,方法感谢学长留下的资料。
步骤参考文件
首先我们的lab目录大致如下
.
|── Lab.iml
|── Makefile
|── Makefile.git
|── src
|── 201200000.pdf
|── submit.sh
└── tests
我们在lab目录下创建pom.xml,并在其中写入如下代码
123456789101112131415161718192021222324<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...
OS_Lab3
OS Lab 3Before Coding如果从书上cv来的makefile中直接make everything,会出现报错,我们将makefile进行修改
修改如下
123ASMKFLAGS = -I include/ -f elf32CFLAGS = -I include/ -c -fno-builtin -m32 -fno-stack-protectorLDFLAGS = -s -Ttext $(ENTRYPOINT) -m elf_i386
除去这个问题,个人在进行make build_img时还遇到了如下问题
先看源代码
123456buildimg : dd if=boot/boot.bin of=a.img bs=512 count=1 conv=notrunc sudo mount -o loop a.img /mnt/floppy/ sudo cp -fv boot/loader.bin /mnt/floppy/ sudo cp -fv kernel.bin /mnt/floppy sudo umount /mnt/floppy
在运行时,因为sudo需要输入ro ...
编译原理10-semantics-ag
语义分析——属性文法属性文法(Attribute Grammar): 为上下文无关文法赋予语义
属性文法Offline 方式计算属性值
已有语法分析树 (calc)
按照从左到右的深度优先顺序遍历语法分析树
关键:
在合适的时机执行合适的动作,计算相应的属性值
语法分析过程中在语法分析过程中实现属性文法
B \rightarrow X \lbrace a \rbrace Y语义动作嵌入的位置决定了何时执行该动作
基本思想:
一个动作在它左边的所有文法符号都处理过之后立刻执行
时机语义动作嵌入在什么地方? 这决定了何时执行语义动作。
SDDDefinition——语法制导定义 (Syntax-Directed Definition; SDD)SDD 是一个上下文无关文法和属性及规则的结合。
每个文法符号都可以关联多个属性
每个产生式都可以关联一组规则
SDD 唯一确定了语法分析树上每个非终结符节点的属性值
SDD 没有规定以什么方式、什么顺序计算这些属性值
注释(annotated)语法分析树显示了各个属性值的语法分析树
3 * 5 + 4
Definiti ...
编译原理09-symtable
语义分析——符号表
符号表Definition(符号表- Symbol Table)符号表是用于保存各种信息的数据结构
作用域
领域特定语言(DSL)通常只有单作用域(全局作用域)
通用程序设计语言(GPL)通常需要嵌套作用域
Example
We take a WRONG assumption here about FunctionSymbol’s scope
在这里我们认为z属于FunctionSynbol中的symbols
如何实现
将上述过程抽象为函数接口的调用
Scope
SymbolTableListener
struct/class当然无论是在c或者c++,又或者Java中,我们不可避免的会遇到类型作用域
Talk is cheap , show me the code1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768//BaseScope.javapacka ...
OS_homework01
OS_homework01鉴于某OS老师只允许使用word提交作业且不允许手写拍照上传这种难以理解的方式,所以在博客中记载一下自己的答案,如有错误欢迎留言 🥳
最后更新于2023-04-19
试述系统调用的实现原理,陷阱机制和绘制系统调用的处理过程,并阐述系统调用的处理逻辑。(满分10分)
操作系统实现系统调用功能的机制称为系统陷阱或系统异常处理机制,由于系统调用而引起处理器中断的机器指令称为陷入指令 (trap),它是非特权指令,在用户态下执行时会产生 CPU 模式切换,即由用户态转换到内核态。每个系统调用都事先规定编号,称为功能号,执行陷入指令时,必须通过某种方式指明对应系统调用的功能号,大多数情况,还应附带有传递给相应服务例程的参数.
系统调用的实现要点包括:
(1) 编写系统调用服务例程;
(2) 设计系统调用入口地址表,每个入口地址都指向一个系统调用的服务例程,有些还包含系统调用自带参数的个数;(3) 陷阱处理机制,需要开辟现场保护区,以保存发生系统调用时应用程序的处理器现场。
\系统调用的处理过程**:应用程序执行系统调用,产生中断转向内核态,进入陷阱处理程序,它将 ...
操作系统-02
操作系统OS chapter 02 计算机硬件系统
操作系统-01
操作系统OS chapter 01 计算机系统概述操作系统控制计算机的角度
人机交互的视角操作系统的人机交互部分
人机交互的初期发展
交互式控制方式
1960s: 行命令控制方式
1970s: 全屏幕控制方式
斯坦福研究所提出的发展计划
始于1960,1980s广泛应用
强调人机交互的中心是人而不是技术
代表成果
鼠标,菜单,窗口控制
人机交互发展WIMP界面缘起:70年代后期Xerox的原型机Star
特征:窗口(windows),图标(Icons),菜单(Menu)和指示装置(Pointing Devices)为基础的图形用户界面WIMP
得益:Apple最初使用并大力推广
时间:1990s开始广泛使用
不足:不允许同时使用多个交互通道,从而产生人机交互的不平衡
多媒体计算机
虚拟现实系统
程序接口的角度操作系统的程序接口
操作系统的程序接口——系统调用
操作系统实现的完成某种特定功能的过程;
为所有运行程序提供访问操作系统的接口
系统调用的实现机制
系统调用的实现要点
系统调用的实现流程
系统结构的角度操作系统软件的规模
OS作为大型软件,结构设计是关键
操作 ...