0%

操作系统和编译原理

编译程序的组成结构:

词法分析、语法分析、语义分析、代码优化、存储分配和代码生成

如果操作系统的源代码是公开的,你认为这样的操作系统是安全的吗?

不安全,linux的源代码是公开的。

编译如何实现“括号配对检查”

1)出现的凡是“左括号”,则进栈;
2)出现的是“有括号”,首先检查栈是否空?若栈空,则表明该“右括号”多余,否则和栈顶元素比较,若相匹配,则栈顶“左括号”出栈,否则表明不匹配。
3)表达式检验结束时,若栈空,则表明表达式中匹配正确;否则表明“左括号”有余。

栈在通过后缀表达式求值的算法思想?

1)顺序扫描表达式的每一项,然后根据它的类型做如下相应操作:
2)若该项是操作数,则将其压入栈中,
3)若该项是操作符,则连续从栈中退出两个操作数y和x,形成运算指令XY,并将计算结果重新压入栈中。当表达式的所有项都扫描并处理后,栈顶存放的就是最后的计算结果。

操作系统的主要功能是什么?

1)进程管理,其工作主要是进程调度,在单用户单任务的情况下,处理器仅为一个用户的一个任务所独占, 进程管理的工作十分简单。但在多道程序或多用户的情况 下,组织多个作业或任务时,就要解决处理器的调度、 分配和回收等问题 。
2)存储管理分为几种功能:存储分配、存储共享、存储保护 、存储扩张。
3)设备管理分有以下功能:设备分配、设备传输控制 、设备独立性。
4)文件管理:文件存储空间的管理、目录管理 、文件操作管理、文件保护。
5)作业管理是负责处理用户提交的任何要求

什么是进程?进程和程序的区别是什么?

(1)进程的概念与定义
在多道程序环境下,允许多个进程并发执行,此时他们将失去封闭性,并具有间断性及不可再现性的特征。为此引入了进程的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性。
进程是程序的运行过程,是系统进行资源分配和调度的一个独立单位。
(2)线程的概念和定义
早期,在OS中能拥有资源和独立运行的基本单位是进程,然而随着计算机技术的发展,进程出现了很多弊端,一是由于进程是资源拥有者,创建、撤销与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机出现,可以满足多个运行单位,而多个进程并行开销过大。
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,每条线程执行不同的任务。
(3)进程和线程的区别

  • 进程是系统进行资源分配和调度的基本单位,线程是CPU调度和分派的基本单位。
  • 线程依赖于进程而存在,一个进程至少有一个线程。
  • 进程有自己的独立地址空间,线程共享所属进程的地址空间。
  • 进程是拥有系统资源的一个独立单位,而线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源,和其他线程共享本进程的相关资源如内存、I/O、CPU等。
  • 在进程切换时,涉及到整个当前进程CPU环境的保存环境的设置以及新被调度运行的CPU环境的设置,而线程切换只需要保存和设置少量的寄存器的内容,并不涉及存储器管理方面的操作,可见,进程切换的开销远大于线程切换的开销。
  • 线程之间的通信更方便,同一进程下的线程共享全局变量等数据,而进程之间的通信需要以进程间通信的方式进行。
  • 多线程程序只要有一个线程崩溃,整个程序就崩溃了,但多进程程序中一个进程崩溃并不会对其他进程造成影响,因为进程有自己的独立地址空间,因此多进程更加健壮。

    现代编译系统中一般采用什么技术来提高符号表的管理效率?

    符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。如常数表、变量名表、数组名表、过程名表、标号表等等,统称为符号表。对于符号表组织、构造和管理方法的好坏会直接影响编译系统的运行效率。

    一遍的代码生成算法中,当生成一条跳转指令时,可能并不知道跳转的目标地址,采用什么技术来解决?

    什么是上下文无关文法?

    上下文无关文法就是说这个文法中所有的产生式左边只有一个非终结符,比如:
    S -> aSb S -> ab
    这个文法有两个产生式,每个产生式左边只有一个非终结符S,这就是上下文无关文法,因为你只要找到符合产生式右边的串,就可以把它归约为对应的非终结符。

    计算机为什么能懂高级语言?

    编译程序中怎样实现先乘除后加减?

    自底向上的语法分析的关键是什么?