大三的课程开始了,这学期有
- 系统方向
- os
- compiler
- 信息系统
- 信息系统概述
- 信息系统分析与设计
- 数字媒体
- 计算机图形学
- 软件工程
- 软件测试
现在两周过去了,做个总结~
os
第一节课
第一节课上主要介绍了为什么学习os,以及os中的八大问题,第一节介绍课斌哥也能上得很充实,一点都不水!
大部分os方面的概念都已经在ics中接触过,下面说说一些新的概念:
- ISA:(instruction set architecture)硬件提供的接口
- ABI:(abstraction binary instruction)cpu提供一部分非特权,os提供特权
- API:库提供的给应用程序
其中application和os之间有直接的接口,和硬件之间也有直接的接口。通过几个实例理解这三个概念的区别,比如要实现一个虚拟机,就要实现ISA,而WinE(windows emulator)就是实现了ABI。
os的功能主要就是两点,面向程序员和面向硬件。
os中的八大问题:
- scale up:主要是多核的情况下性能怎么同步提升
- security&privacy:do_brk()的exploit
- power efficiency
- mobility:移动领域跟os也是紧密相关
- parallel code
- scale out:分布式系统
- non-volatile storage:os需要adapt to new memory model
- virtualization
第二节课
首先介绍了pc的总体结构,即von neumann体系结构
其中io和cpu之间还有dma。
系统有五种模式
- real mode:启动时,一开始是实模式,从物理地址访问,16位。
- protected mode:保护模式,32位,用虚拟内存保护os,且保证app之间不相互影响。
- virtual-8086 mode:为了保证兼容提出来的。
- IA-32e mode:32位扩展,支持36位。
- SMM:最高优先级
系统的一些重要的寄存器:
- EFLAGS
- CR0:含PE(protection enabled)和PG(paging)
- CR1:intel自己使用的
- CR2:告诉os page fault的地址
- CR3:页表的base address
- CR4
- GDTR:global descriptor table register,gdt是提供的分段的机制,对每一段要明确base address和limit,linux中没有分段,故设置成0和4G
- IDTR:interrupt descriptor table register,IDT是一个数组存储每个中断描述符对应的handler的地址,对于int #0x80 handler在跳转到syscall table
- TR
接下来讲了memory model,重要的一点是memory的寻址模式。早先的8086是16位的cpu,物理内存确有20位,因此采用两个16位的寄存器来寻址,physical addr=16*CS+IP。直到80386有32位,因此用eip
memory layout如下:
- low memory:机器启动时运行的栈,内存
- VGA display:操作屏幕显示的代码
- BIOS ROM:加载boot loader
I/O space:用in,out操作
接下来解读代码,xv6 boot的代码。
compiler
compile是对语言的解析,一种语言的定义如下:
因此学编译器就是看每一层是怎么做的。
现在还只是简单讲到了lexical analysis(词法分析)。其中编译器分为以下几个阶段:
对于一个程序其实就是一串字符,包括空格,换行符等,而lexical analysis要做的就是将这些字符转换成token stream,token是一个结构由token class和lexeme组成,token class就包括operator,identifier,keyword等,而lexeme则是某个此法单元下具体的字符串。
当提取出token之后就将token组织成一个符合语言规范的结构,有了结构之后再解析这个结构的语义。
那么一门语言究竟如何定义和如何解析呢?
定义一门语言,就是定义出这门语言有哪些字符串,必须有一个强有力的工具来表达字符串的集合,即regular expression,假设e是reg-exp,那么S(e)则是这个e所表达的字符串集合。
e有一下几种模式:
- character c(c是属于语言所规定的alphabet):S(c)={c};
- ε:代表空串,S(ε)={}
- concatenation e1e2: e1e2分别是reg-exp,S(e1e2)=S(e1)S(e2)
- choice e1|e2:S(e1|e2)=S(e1) U S(e2)
- kleen closure e*:S(e*)=S(ε) U S(e) U S(ee) U S(eee) U … = S(e0) U S(e1) U S(e2) U S(e3) U …
- 正闭包 e+:S(e+)=S(e) U S(ee) U S(eee) U …
有了正则表达式就能容易的定义正则语言了。
比如定义identifier,就是identifier=letter(letter|digit)*
定义了语言之后想要识别他们,就引入了有限自动机,有限自动机分为一系列状态,一个起始状态,一个或一些接收状态,transition,以及输入,就不多说了。
接下来的课程应当是怎么根据regular expression构建finite automata.
信息系统工程
这是一门概述课,主要是了解信息系统的概念。
信息系统不仅仅是计算机软硬件,而且是业务流程,基础数据,应用者与计算机的有机结合。
信息化的实质:
- 管理观念变革:信息系统不仅仅是工具和手段。
- 业务流程变革
- 工作方式转变
- 再创新的过程
信息化的三个阶段:
- 结果记录
- 流程监控
- 智能决策
信息系统面临的挑战:
- 彻底、全方位的实施
- 不断升级换代
- 根据需求逐步分散实施
- 不同部门或企业间信息交互与共享
软件测试
这门课主要还是实践吧,概念无非那些,考试前突击就好。
一些术语的区分:
- error
- fault
- failure
- incident
- exception
- anomaly
然后是一些软件测试的原则,这个好好读一下书在总结吧。
然后讲了软件测试上需要的一些数学知识,这个也是要用到的时候在好好看看吧。
计算机图形学
说几个关键概念:
- 图形处理管线:图形处理的一般过程,称为图形管线。
- 几何管线(3D管线)
- 图像管线(2D管线)