-
英文口头禅 2007-02-26
1. Absolutely! 毫无疑问!
2. Adorable! 可爱极了!
3. Amazing! 太神奇了!
4. Anytime! 随时吩咐!
5. Almost! 差不多了!
6. Awful! 好可怕啊!
7. Allow me! 让我来!
8. Baloney! 胡扯!荒谬!
9. Bingo! 中了!
-
OpenGL中的BMP图像载入 2007-02-23
BMP图像的载入可以用于纹理贴图,这里介绍这种方法。这里用到的主要是auxDIBImageLoad函数,来自glaux.h库。所以在程序中一定要加上#include <GL\glaux.h>在工程中也要加载相关的.lib文件。代码加了注释,应该可以看懂。

-
写博客想到…… 2007-02-22
最近在看书,也在网上接触各种技术,自己的基础在一天一天地成长,希望有一天能长得根壮冠粗,好结出硕果。
看了不少东西,但实践不是太多。所以也没有什么可以拿得出手的,故也没往自己的博客上放。书看了,也没有总结,所以也没有什么心得笔记可以拿出来与别人分享。
之与半瓶水拿出来秀,倒不如装满了倒之与人。
写博客不久,自然和老手不能相提并论。但我想,博客一半是别人看,一半是自己看。首先是自己看,如果自己都没有看懂,拿出来秀,未免不太好。上次我贴出SRGP的一些... -
BlogBus的新后台支持Opera,不错! 2007-02-13
如题
Bus的工作还是不错的。终于不用给出什么第三方不完美解决方案了。
后台的风格和功能似乎也很不错,淡淡的背景使人更关注正在编辑的文字。自动保存功能实用极了。
Good Job, Bus!
... -
Java复习笔记 2007-01-17
Java复习
重点:
>> 所有Java关键字都是小写的,TURE、FALSE、NULL等都不是Java关键字
>> Java字符采用Unicode编码,每个字符占两个字节
>> Java浮点类型常量有两种表示形式 3.14 314.0 .314 或3.14e2 3.14E2 314E2
>> Java浮点型常量默认为double型
>> 引用类型变量的值是某个对象的句柄,而不是对象本身
>> 声明引用类型变量时,系统只为该变量分配引用空间,并未创建一个具体的对象
>> Java也不能完全防止if(bool i = true){//...}错误的产生;但是Java可以解决这样的问题if(Int = 3){//...}因为Java的if里只能接收boolean
>> 在switch语句里别忘了break和default,switch只能接收byte short char int
>> Java的三类循环语句for/ while/ do while
>> 在数组中不能进行类型提升
int [ ] a;
int [ ] b = new int [4];
char [ ] c = new char [5];
a = b;
a = c;//ERROR
>> 数组的初始化有两种方式:动态和静态
>> 每个数组都有一个属性length指明它的长度
>>
int[][] tt = new int[4][];
tt[0] = new int[2];
tt[1] = new int[4];
tt[2] = new int[6];
tt[3] = new int[8];>> int intArray[][] = {{1,2},{2,3},{3,4,5}};
int intArray1[3][2] = {{1,2},{2,3},{4,5}}; //illegal
>> 当复制大量数据时,使用System.arraycopy()命令, 优化JAVA程序开发,提高JAVA性能
----> arraycopy(Object src, int srcPos, Object dest, int destPos, int length)>>
重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型
重写方法不能使用比被重写方法更严格的访问权限
public class Parent {
public void method1() {}
}
public class Child extends Parent {
private void method1() {} //illegal
}>>
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造方法中调用父类的构造方法
super的追溯不仅于直接父类>>
// student.java:
class Person{
...
}
class Student extends Person {
...
public static void main (String args[]){
Person p = new Person ("Liming",50);
Student s = new Student ("Wangqiang",20,"PKU");
Person p2 = new Student ("Zhangyi",18,"dlut");
Student s2 = (Student) p2;
}
}>>
一个对象只能有一种确定的数据类型
一个引用类型变量可能指向(引用)多种不同类型的对象
Person p = new Student();
Object o = new Person();
o = new Student();
>>声明是父类型的,但指向子类型,那么子类型的一些域就不可以使用
Student m = new Student();
m.school = "dlut"; //合法
Person e = new Student();
e.school = "dlut"; //非法
>> 虚拟方法调用(多态情况下)
class TestVirtualInvoke{
static void doStuff(Shape s){
s.draw();
}
public static void main (String[]args){
Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line ();
doStuff(c);
doStuff(t);
doStuff(l);
}
}
class Shape {
void draw (){ System.out.println("Shape drawing."); }
}
class Circle extends Shape {
void draw (){ System.out.println("Draw Circle."); }
}
class Triangle extends Shape {
void draw (){ System.out.println("Draw Triangle."); }
}
class Line extends Shape {
void draw (){ System.out.println("Draw Line."); }
}>> 对象数据类型的转型
损失为“精度”—— “数据域”(属性和方法)>>
同类收集( homogenous collections)MyDate[] m = new MyDate[2];
m[0] = new MyDate(22, 12, 1964);
m[1] = new MyDate(22, 7, 1964);异类收集(heterogeneous collections)
Person [] p= new Person[3];
p[0] = new Student();
p[1] = new Person();
p[2] = new Graduate();>> 继承的诡计
public class TestHeritate{
public static void main (String[] args){
Base b = new Subclass();
System.out.println(b.x);
System.out.println(b.method());
} }class Base{
int x = 2;
int method(){ return x; }
}class Subclass extends Base{
int x = 3;
int method (){ return x ; }
}
// 结果是
2
3访问一个引用型的变量的非静态方法,运行时与实际引用的对象的方法绑定。
访问一个引用型的变量的成员变量(包括静态变量和实例变量),运行时与声明的类的成员变量绑定。
访问一个引用型的变量的静态方法,运行时与声明的类的方法绑定。>> instanceof 关键字 确定对象类型
class InstanceOf {
public static void main (String[] args){
Object [] things = new Object [3];
things [0] = new Integer (4);
things [1] = new Double (3.14);
things [2] = new Double (2.09);
double s = 0;
for (int i=0; i< things.length; i++){
if (things[i] instanceof Integer)
s += ((Integer)things[i]).intValue();
else if (things[i] instanceof Double)
s += ((Double)things[i]).doubleValue();
}
System.out.println("sum="+s);
}
}
>> 对Java对象的强制类型转换称为造型
在造型前可以使用instanceof操作符测试一个对象的类型
从子类到父类的类型转换可以自动进行
Object o = new Child();
从父类到子类的类型转换必须通过造型(强制类型转换)实现
Child child;
Parent parent = new Parent();
child = (Child)parent;无继承关系的引用类型间的转换是非法的
如两个数组间的转换,如从int[]到char[]>>
this(argument_list) 可以调用父类的构造方法
super(argument_list)语句调用父类的构造方法>> super的使用有三种情况:
用来访问父类被隐藏的成员变量,如:super.variable
用来调用父类中被重写的方法,如:super.Method ( [paramlist] );
用来调用父类的构造函数,如:super( [paramlist] );
>> this的使用也有三种情况,类似>> 在子类构造函数中,调用了父类的构造函数,而在父类的构造函数中调用了一个被子类覆盖的方法,此时,这个方法会被子类覆盖。发生错误
所以设计构造函数的时候要尽可能地简洁。
>> static块通常用于初始化static (类)属性
class Person {
public static int total;
static {
total = 100;//为total赋初值
}
…… //其它属性或方法声明
}>> 用static来实现Singleton
class Single{
private static Single onlyone = new Single();
private String name;
public static Single getSingle() {
return onlyone;
}
private Single() {}
}public class TestSingle{
public static void main(String args[]) { Single s1 = Single.getSingle();
Single s2 = Single.getSingle();
if (s1==s2){
System.out.println("s1 is equals to s2!");
}
}
}>>
final标记的类不能被继承。
final标记的方法不能被子类重写。
final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
final标记的成员变量必须在声明的同时或在每个构造方法中显式赋值,然后才能使用。>>
含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。否则不能被实例化。
抽象方法只需声明,不需实现。
abstract 返回类型 函数名(参数列表)>> abstract方法必须位于abstract类中
>> public class A{
private int s = 111;
public class B {
private int s = 222;
public void mb(int s) {
System.out.println(s); // 局部变量s
System.out.println(this.s); // 内部类对象的属性s
System.out.println(A.this.s); // 外层类对象属性s
}
}
public static void main(String args[]){
A a = new A();
A.B b = a.new B();
b.mb(333);
}
}>> java.Math
Math.floor //不大于参数的最大整数
Math.ceil // 不小于参数的最小整数>> finally
不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。>>
equals比较“引用”是否相等
实现为
public boolean equals(Object o) { return this==o; }
改写后为比较“内容”。改写的有File、Date、String、包装类(wrapper)
comparable为比较“大小”
实现为
public interface Comparable { public int compareTo(Object o); }>> Object类的hashCode方法实现是将对象内存地址转换成一个整数,所以,不同对象的散列值不同。
不同的对象应该提供不同的散列值。>> 每个基本数据类型都对应一个包装类。
如 char 有Character包装类>> 数学运算全部都是静态方法
故使用时可以这样做
Math.abs(XX)>> Java GUI
1、提供了一些容器组件,用来容纳其他的组件
2、用布局管理器来管理组件在容器上的布局
3、利用监听接口或适配器来响应各种事件,实现界面与用户的交互。
4、提供了一套绘图机制,来自动维护或刷新图形界面。//------------------------------------------------------------
java.lang.Object
|
+----java.awt.Component
|
+----java.awt.Container
|
+----java.awt.Window
|
+----java.awt.Frame//-------------------------------------------------------------
//-------------------------------------------------------------java.lang.Object
|
+----java.awt.Component
|
+----java.awt.Container
|
+----java.awt.Panel//-------------------------------------------------------------
>> 布局管理器
BorderLayout、FlowLayou -
操作系统复习笔记-附录(词汇) 2007-01-15
操作系统词汇
并行系统:parallel system
操作系统:operating system
超文本:hypertext
城域网:metropolitan-area network, MAN
存储器:memory
存储区域网络:storage-area network, SAN
大型计算机:mainframe
大型计算机系统:mainframe computer system
对称多处理:symmetric multiprocessing, SMP
对等网络:Peer-to-Peer
对等网络系统:Peer-to-Peer system
多处理机系统:multiprocessor system
多道程序设计:multiprogramming
多路复用信息与计算服务:MULTIplexed Information and Computing Service, MULTICS
多任务处理:multitasking
非对称多处理:asymmetric multiprocessing
分布式锁定管理:distributed lock manager, DLM
分布式系统:distributed system
分时:time sharing
分时系统:time-shared system
辅助存储器(二级存储器):secondary storage
高可用性(高效率):high availability
个人工作站:personal workstation
个人计算机:personal computer, PC
个人数字助理:personal digital assistant, PDA
工作站:workstation
功能退化,故障弱化:graceful degradation
广域网:wide-area network,WAN
环球网:World Wide Web, WWW
集群系统:clustered system
计算服务系统:compute-server system
交互式计算机系统:interactive computer system
紧密耦合系统:tightly coupled system
进程:process
局域网:local-area networks,LAN
客户端/服务器系统:client-server system
控制程序:control program
蓝牙:BlueTooth
内核:kernel
批处理系统:batch system
容错:fault tolerant
入口:portal
软件:software
软实时系统:soft real-time system
实时系统:real-time system
手持系统:handheld system
输入输出设备:input/output (I/O) device
松散耦合系统:loosely coupled system
图形用户界面:graphic user interface, GUI
网络:network
网络操作系统:network operating system
网络计算机:network computer
文件服务系统:file-server system
物理内存(物理存储器):physical memory
响应时间:response time
小范围网络:small-area network
小型计算机:minicomputer
异步传输模式:Asynchronous Transmission Mode, ATM
因特网:Internet
硬件:hardware
硬实时系统:hard real-time system
中央处理单元:central processing unit, CPU
资源分配程序:resource allocator
资源利用:resource utilization
作业调度:job scheduling
作业调度程序:job schedule
-
操作系统复习笔记五 2007-01-15
<h3>第七章<br /></h3>进程同步<br /><br />>>进程的同步(直接作用)synchronism<br />指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态 <br /> <br />>>进程的互斥(间接作用)mutual exclusion<br />由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥<br /><br />>>临界资源:critical resource<br />系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量<br /><br />>>临界区(互斥区):critical section <br /> 在进程中涉及到临界资源的程序段叫临界区,多个进程的临界区称为相关临界区<br /><br />P(s)<br />{<br /> s.value = s.value --;<br /> if (s.value < 0)<br /> {<br /> 该进程状态置为等待状态<br /> 将该进程的PCB插入相应的等待队列末尾s.queue;<br /> }<br /> }<br /><br />//----------------------------------------<br />V(s)<br />{<br /> s.value = s.value ++;<br /> if (s.value < = 0)<br /> {<br /> 唤醒相应等待队列s.queue中等待的一个进程<br /> 改变其状态为就绪态<br /> 并将其插入就绪队列<br /> }<br />}<br /><br /><br />S1初值为1,S2初值为0<br /><br />P: Q:<br />while (true) { while (true) {<br /> 生产一个产品; P(s2);<br /> P(s1) ; 从缓冲区取产品;<br /> 送产品到缓冲区; V(s1);<br /> V(s2); 消费产品;<br />}; };<br /><br />//小结:P为申请资源,V为释放资源;先P后V<br /><br />多个缓冲区的生产者和消费者<br /><br />P:<br />i = 0;<br />while (true) <br /> { <br /> 生产产品; <br /> P(S1); <br /> 往Buffer [i]放产品; <br /> V(S2); <br /> i = (i+1) % n; <br /> };<br /><br />Q:<br />j = 0;<br />while (true) <br /> {<br /> P(S2);<br /> 从Buffer[j]取产品;<br /> V(S1);<br /> 消费产品;<br /> j = (j+1) % n;<br />};<br /><br /><br />P.V操作讨论<br />1) 信号量的物理含义:<br />S>0表示有S个资源可用<br />S=0表示无资源可用<br />S<0则| S |表示S等待队列中的进程个数<br /><br />P(S):表示申请一个资源 <br />V(S):表示释放一个资源。信号量的初值应该大于等于0<br /><br />P.V操作的优缺点<br />优点:<br />简单,而且表达能力强(用P.V操作可解决任何同步互斥问题)<br />缺点:<br />不够安全;P.V操作使用不当会出现死锁;遇到复杂同步互斥问题时实现复杂<br /><br /><br /><br /><br /><br />
-
操作系统复习笔记四 2007-01-15
第四章
进程
明确进程的含义和程序和区别
明确进程包含的内容
明确并发与并行的区别
明确进程的状态及转换条件
明确进程控制块的作用及内容
明确上下文切换的过程
了解进程间通信的机制有哪些,包括单机系统和网络系统
进程
1、运行中的程序,进程的运行必须在顺序文件中???
2、进程包括
程序计数器(program counter)
堆栈(stack)
数据区(data section)
进程状态
1、新建
2、运行
3、等待
4、准备
5、终止
进程状态图(**见幻灯片4**)
进程控制块(PCB)
>>进程相关的信息
1、进程状态
2、程序计数器
3、CPU寄存器
4、CPU调试信息
5、内存管理信息
6、计账信息
7、I/O状态信息
PCB
_________________
| | process |
| pointer | state |
|________ |________|
| process number |
|_________________|
| program counter |
|_________________|
| registers |
|_________________|
| memory limits |
|_________________|
| list of |
| open files |
|_________________|
各种进程调度队列
1、任务队列(job queue)
全部进程
2、准备队列
3、设备队列
4、进程在不同的队列中可以迁移
准备队列图(**见幻灯片9**)
进程调度示意图(**见幻灯片10**)
调度器(schedulers)
>>远程调度器(long-term scheduler)
1、选择要进入准备队列的进程
2、经常使用
>>远程调度器(short-term scheduler)
1、在准备队列中选择要执行的进程
2、不常使用
3、决定了多道程序的程度
中程调度(图**幻灯片12**)
进程分类
1、I/O-bound process -long I/O time
2、CPU-bound process -long CPU bursts
上下文切换
1、当CPU切换到另一个进程时,要保存旧进程,并加载新来进程的状态
2、上下文切换时间是一种系统开销,系统在切换上下文时不做其它有用的工作
3、切换的时间由硬件决定
进程创建
1、父进程创建子进程,如此下去,成为树
2、资源共享
父子共享所有资源
子资源共享父的子资源
不共享
3、执行
父子并发执行
父等待,直至子执行完
4、地址空间
子复写父的 ???
child has a program loaded into it
5、UNIX 例子 ???
fork:
exec:
进程结束???
协作进程(cooperating processes)???
1、独立的进程不会受其它进程执行的影响
2、协作进程会受到其它进程执行的影响
3、进程协作的好处
信息共享
计算加速
模块化
方便
生产者消费者问题(略)
进程间通信(IPC)
1、消息系统——不用借助共享变量
2、有两种操作:send(message)/receive(message)
3、条件:物理(共享内存、总线),逻辑(逻辑属性)
>>直接通信
1、进程间必须明确地指出通信对方的名字
send(P, message)——发给P
receive(Q, message)——从Q收
2、通信属性
自动连接、明确的两个对应进程、明确的一条线路、不一定直连,但一定双向
>>非直接通信
1、通过共享邮箱(mailbox)实现通信
2、通信属性
只有通过共享邮箱才能实现通信
线路不确定
线路可能不直连,可能是双向
3、send(A, message)——发信到A邮箱;receive(A, message)——从A邮箱收信
进程同步
Bocking(阻塞)——同步
Non-blocking(非阻塞)——异步
-
操作系统复习笔记三 2007-01-15
第三章
操作系统结构
明确操作系统的基本组成包含哪些部分
明确系统调用的含义
明确操作系统设计所采用的结构有哪些,各自的优缺点
常见系统组成
进程管理
主存管理
文件管理
I/O系统管理
辅存管理
网络
保护系统(protection system)
命令解释程序(Command-Interpreter System)
进程管理
1、进程是执行中的程序。进程需要CPU时间,内存,文件,I/O驱动器来完成任务
2、操作系统负责下面的进程管理
进程创建和删除
进程监视和恢复
进程并行和通信
主存管理
1、是一块字和字节的空间,每个字和字节都有自己的地址
2、主存是易失性的(volatile)
3、操作系统负责下面的主存管理
跟踪正在被使用的内存及使用对象
内存有空余时决定载入哪个进程
分配和回收内存空间
文件管理
1、文件是创建时定义的一组相关信息
2、操作系统负责下面的文件管理
文件创建和删除
目录创建和删除
Support of primitives for manipulating files and directories.
映射文件到辅存
备分到可靠的存储媒体
I/O系统管理
1、I/O包括“缓冲-快存”(buffer-caching)系统
2、通用设备驱动器接口
3、硬件驱动
辅存管理
1、主存易失、容量小,故要辅存来备份
2、现在操作系统用磁盘来作为辅存
3、操作系统主要负责下面的辅存管理
空余空间管理
存储分配
磁盘调度
网络(分布式系统)
1、分布式系统是一组不共享内存和时钟CPU
2、各个CPU通过网络连接
3、通过协议进行通信
4、分布式的好处
加速计算
增强数据可用性(data availability)
提高可靠性
保护系统
1、保护系统是一种访问控制机制,主要限制程序、进程、或用户访问系统或用户资源
2、保护机制必须做到
区分授权和未授权
specify the controls to be imposed ???
provide a means of enforcement
命令解释程序系统
>> 操作系统带的命令很多包括
1、进程创建和管理
2、I/O处理
3、辅存管理
4、主存管理
5、文件系统访问
6、保护
7、网络
>> 读取和解释控制语句的程序叫法有所不同
1、命令行解释器(command-line interpreter)
2、shell(in UNIX)
>> 命令解释程序的作用是获取和执行下一个命令
系统调用(System Calls)
1、系统调用提供了运行程序和操作系统之间的接口
2、一般都可使用汇编语言
3、一些如C/C++的高级语言代替汇编进行系统调用,进行系统编程
4、三种常见的参数传递方法
寄存器中
在内存中建表,表的地址在寄存器中当作参数传递
在椎内存中进栈和出栈
系统调用的种类
1、进程控制
2、文件管理
3、设备管理
4、信息保存(imfomation maintenace)
5、通信
MS-DOS 运行
_______________
| |
| free memory |
| |
|______________ |
| command |
| interpreter |
|______________|
| |
| kernel |
|______________|
_______________
| |
| free memory |
|_______________|
| |
| |
| process |
| |
|_______________|
| command |
| interpreter |
|_______________|
| |
| kernel |
|_______________|
UNIX 运行时的多程序
_______________
| |
| process D |
|______________ |
| free memory |
|______________|
| |
| process C |
|______________|
| command |
| interpreter |
|------------------ |
| |
| process B |
|______________|
| |
| kernel |
|______________ |
进程通信模型
1、消息模型
_______________
| |
| process |<<\
|_______________| | |
| | | | Message1
|_______________| | |
| |<<<<<\
| process | | | | |
|_______________| | | | |
| | | | | |
| | | | | | Message2
|_______________| | | | |
| |<</ | |
| kernel | | |
|_______________|<<<<</
2、共享内存
_______________
| |
| process |<<|\
|______________ | | |
| shared Mem |<<| |
|______________ | | |
| |<<|/
| process |
|______________ |
| |
|______________ |
| |
| kernel |
|______________ |
MS-DOS系统
用最小的空间实现最大的功能
1、不分模块
2、虽然有一定结构,但是接口和功能分开得不是很好
==========应用程序==============(!!SOME PROBLEMS HERE!!)
\/ \/
==========系统程序====
\/
=====MS-DOS 设备驱动==
\/
==========ROM BIOS 设备驱动
UNIX系统结构
分为两部分
>>系统程序
>>内核
1、包括所有在系统调用和物理硬件之间的一切
2、提供文件系统、CPU调度、内存管理、和其它功能
分层思想(OS/2)
1、操作系统分为几个层,每个层都是建立在下一层的基础之上,0层是硬件,最高层是用户接口
2、With modularity, layers are selected such that each uses functions (operations) and services of only lower-level layers.???
微内核系统结构(Windows NT)
1、尽可能得从内核转移到用户空间
2、用消息传递的方式在用户模块间通信
>>好处
1、微内核易扩充
2、easier to port the operating system to new architectures???
3、更加可靠(运行于内核模式的代码更少)
4、更加安全
-
操作系统复习笔记二 2007-01-15
第二章
计算机系统结构
分层的存储设备:
registers fast
| /|\
cache |
| |
main memory |
| |
electornic disk |
| |
magnetic disk |
| |
optical disk |
| |
magnetic tapes slow
迁移历程
magnetic disk ->main memory ->cache ->hardware register
Hardware Protection(硬件保护)
1、Dual-Mode Operation
2、I/O Protection
3、Memory Protection
4、CPU Protection
Dual-Mode Operation
1)多任务的系统要求一个任务的错误不引起另一个任务错误执行
2)硬件支持两种不同模式
User mode-用户保证程序的执行
Monitor mode(kernel mode/system mode)-操作系统保证程序的执行
3)Mode位加入到硬件中:monitor(0)/user(1)
4)Privileged instructions只能在monitor模式下使用
I/O Protection
所有IO指令都是privileged instruction
不能让应用程序在moditor模式下控制计算机
System call(系统调用)???
Memory Protection
1、至少要保护 interrupt vector 和 interrupt service routines
2、两个寄存器:Base register -开始的内存地址;Limit register -内存地址范围
3、范围外的内存空间是受保护的
4、载入base and limit register 的指令是 privileged instruction
CPU Protection
Timer
1、一定时间间隔后中断,交还给操作系统控制权
2、每一个clock tick timer 减一,timer 到0时,中断发生
3、Timer 一般被用于分时系统
4、Timer 也被用于计算当前时间
5、Load-timer是一个privileged instruction







