摘要:首先,Linux是如何辨别每一个使用者的呢?使用者身份的辨别是通过UID和GID实现的,虽然我们在登入Linux主机的时候是以账号的形式,但对于Linux主机来说,他并不会直接认识你的账号,他仅认识ID,其实账号只是为方便用户记忆。而你的ID与账号的对应就在/etc/passwd中。每个登入的使用者至少都会获得两个ID,一个是使用者ID(User ID),一个是群组ID(Group ID)。如何登入Linux取得UID和GID?当我们在Linux的登入界面输入账号和密码后,Linux会执行下列动作:1. 先找寻 /etc/passwd 里面是否有这个账号?如果没有则跳出,如果有的话则将该账号对
阅读全文
摘要:背景 CPU所能直接访问的存储器只有内存和处理器内的寄存器。机器指令可以用内存地址作为参数,而不能用磁盘地制作参数,因此,执行指令以及指令使用的数据必须在这些直接可访问的存储设备上。如果数据不在内存中,那么在CPU使用前必须先把数据移到内存中。对于寄存器中的内容,绝大多数CPU可以在一个时钟周期内解析并执行一个或多个指令。而对于内存(其访问通过内存总线上的事务进行),就不行了。完成内存访问可能需要多个CPU时钟周期,由于没有数据以便完成正在执行的指令,CPU通常需要暂停(stall)。由于内存访问频繁,这种情况是难以忍受的。解决方法是在CPU与内存之间,增加快速内存。这种协调速度差异的内存缓存
阅读全文
摘要:不为考试,重读计算机组成原理。从组成的层次结构来说,机器指令分为三类:微指令,微程序级的指令,它属于硬件;宏指令,由若干条机器指令组成,它属于软件;机器指令,介于微指令和宏指令之间,也可以说是软件与硬件之间,通常习惯把每一条机器语言的语句称为机器指令。而又将全部机器指令的集合称为机器的指令系统。计算机设计者主要研究如何确定机器的指令系统,如何用硬件电路、芯片、设备来实现机器指令系统的功能。计算机的使用者则是依据机器提供的指令系统,使用汇编怨言来编制各种程序。指令系统的发展过程:50年代,只有定点加减、逻辑运算、数据传送、转移等十几至几十条指令;60年代,出现了乘除运算、浮点运算、十进制运算、字
阅读全文
摘要:本篇重点是非阻塞IO,即java1.4提供的nio包,顺带记录一些其他信息。在Socket技术中我们利连接时间的付出换来数据传输的可靠性。Java提供一些控制连接时间的技术,以增强其传输效率。例如超时和中断。为防止无限制等待或为控制等待时间,可调用Socket.setSoTimeout(millies)设置超时时间。另外,在应用构造器Socket(address, port)和ServerSocket(port)时,JVM将先建立连接而后创建socket对象,无参构造器Socket()及ServerSocket()则无需建立连接,然后调用发表在JDK1.4中的connect()方法,可以改善因
阅读全文
摘要:在文件IO中,经常需要写出和读入整个对象。Java提供了在二进制文件中对对象的输出和输入的处理和操作。而对象序列化Serializable,是专门用来提供在二进制文件IO中,对对象的写出和读入技术。序列化的目的是为了在二进制文件执行对对象文件的IO中,保证对象写出和读入的一致性persistence。对输出对象序列化的结果是在输出文件中不仅记录有关对象类型及其状态信息,而且记录封装在对象中的数据及其类型。在读入对象的操作中,则按照对象序列化的信息,进行反序列化deserilazable处理,重新在内存中还原对象。 序列化的对象必须是实现了Serializable接口的实例。这个接口包括在ja.
阅读全文
摘要:数据流指具有一定字节长度和方向的线性有序的数据对象。在Unix/Linux中,路径中的大、小写字母表示不同的路径;而Windows操作系统则忽略大小写。PS. File类的两个常量:File.separator在UNIX系统中值是/,在Windows系统中值是\\;File.pathSeparator在UNIX系统中值是:,在Windows系统中值是;。Java流操作有关的类和接口:(这里的讨论转自他处,可惜笔记时未记出处) File类,对文件系统中文件及文件夹进行封装的对象。File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读。File类还拥有获取当前文件的
阅读全文
摘要:在很多语言中,当函数返回时,局部与该函数的变量便都会消失。因为一个函数只有在它调用的所有函数都返回以后,它才能返回。所以我们说函数调用是按后进先出的方式进行的。如果在函数的入口处创建局部变量,在函数的出口处删除它们,则可以使用一种LIFO的数据结构(即栈)来存放他们。栈帧,与通常的栈概念不同,局部变量是(在函数入口处)成批压入,并(在函数出口处)成批弹出。此外,当局部变量在栈中被创建时,它们总是没有立刻初始化。最后,当往栈中压入很多变量之后,还会需要访问压在栈顶之下的较深的变量,所以,这里我们将栈看做是一个大型数组,并带有一个特殊寄存器,即栈指针,它指向栈内的某个存储单元。栈通常只在函数入口处
阅读全文
摘要:内容出自编译原理(虎书)编译器各阶段如下图:词法分析(Lex):将源文件分解为一个个独立的单词符号;语法分析(Parse):分析程序的短语结构;语法动作(Parsing Actions):建立每个短语对应的抽象语法树;语义分析(Semantic Analysis):;栈帧布局(Frame Layout):按机器要求的方式将变量、函数参数分配于活动记录(即栈帧)内;翻译(Translate):生成中间表示树(IR trees),这是一种与任何特定程序设计语言和目标机体系结构无关的表示;规范化(Canonicalize):提取表达式中的副作用,整理条件分支,以方便下一阶段的处理;指令选择(Inst
阅读全文
摘要:线程协调利用多线程进行并行处理可以提高程序的运行效率。但在代码中必须提供对各线程的控制,协调它们之间的工作,尤其在个线程共享资源或数据的情况下,更须如此。Java提供了一系列技术,进行线程间的协调控制:使用关键字volatile来保证多线程访问共享数据的一致性;使用关键字synchronized保证多线程访问共享资源或方法时的协作和有序;应用wait()方法迫使当前正在执行的线程必须等待,直到其他线程调用notify()或notifyAll结束等待状态;应用notify()或notifyAll()方法通知其他等待线程可以进入共享资源进行更新和操作。volatilecache技术的应用提高了访问
阅读全文
摘要:不为考试,重读操作系统——Operating System Concepts多线程服务器也有一些潜在问题,第一个是关于在处理请求之前用以创建线程的时间,以及线程在完成工作之后就要被丢弃这一事实;第二个问题更为麻烦,如果允许所有并发请求都通过新线程来处理,那么没有限制在系统中并发执行的线程的数量,无限制的线程会耗尽系统资源,如CPU时间和内存。解决这个问题的一种方法是使用线程池(thread pool)。线程池的主要思想是在进程开始时创建一定数量的线程,并放入到池中等待工作。服务器收到请求时,它会唤醒池中的一个线程(如果有可以用的线程),并将要处理的请求传递给它。一旦线程完成了服务,它会返回到池
阅读全文
摘要:Java多线程的目的是最大限度的利用CPU资源,实际上,操作系统的多进程实现了多任务的并发执行,程序的多线程实现了进程的并发执行。其前提是操作系统对多任务、多进程、多线程的支持。另外,在JVM的线程调度部分采用抢占式调度机制。下面是一个简单的多线程的例子public class SimpleThreadTest { public static void main(String[] args){ System.out.println(Thread.currentThread().getName()); new HelloThread().star...
阅读全文
摘要:不为考试,重读操作系统概念——Operating System Concepts线程是CPU使用的基本单元,它由线程ID、程序计数器、寄存器集合和栈组成。它与属于同一进程的其他线程共享代码段、数据段和其他操作系统资源,如打开文件和信号。多线程编程具有如下优点:响应度高,如果对一个交互程序采用多线程,即使其部分阻塞或执行较冗长的操作,那么该程序仍能继续执行,从而增加了对用户的响应程度,例,多线程Web浏览器再用一个线程装入图像时,能通过另一个线程与用户交互;资源共享,线程默认共享它们所属进程的内存和资源,代码和数据共享的有点事它能允许一个应用程序在同一地址空间有多个不同的活动线程;经济,进程创建
阅读全文
摘要:不为考试,重读操作系统概念——Operating System Concepts现代计算机系统允许将多个程序调入内存并发执行。这一发展要求对各种程序提供更严格的控制和更好的划分。这些需求产生了进程(process)的概念,即执行中的程序。进程是现代分时系统的工作单元。操作系统越复杂,就越能为用户做更多的事,虽然操作系统的主要关注点是执行用户程序,但是也需要顾及各种系统任务(放在内核之外会更好)。因此,系统有一组进程组成:操作系统进程执行系统代码,用户进程执行用户代码。通过CPU多路复用,所有这些进程可以并发执行,通过在晋城之间切换CPU,操作系统能是计算机更为高效。进程是执行中的程序,是一种给
阅读全文
摘要:不为考试,重读操作系统——Operating System Concepts用户界面,所有操作系统都有用户界面(User Interface,UI)。用户界面可以有多种形式,一种是命令行界面(Command-Line interface,CLI),它采用文本命令,并用一定的方法输入(记忆中允许输入并编辑命令的程序);另一种是批界面(batch interface),其中控制这些命令和命令的指令被输入文件中,通过执行文件来实现;最为常用的是图形用户界面(Graphical User Interface,GUI),它具有定点设备来指挥IO。这里讨论两种最基本的方法,一种方法是提供命令行界面或命令中
阅读全文
摘要:I/O系统的发展概况I/O设备与主机信息传送的控制方式I/O设备与主机交换信息时,共有5种控制方式:程序查询方式、程序中断方式、直接存取方式(DMA)、I/O通道方式、I/O处理机方式。程序中断方式,当IO设备准备就绪并向CPU发出中断请求后才予以响应,CPU不必时刻查IO设备的准备情况,即CPU执行程序与IO设备做准备是同时进行的。当然,采用程序中断方式,CPU和IO借口不仅在硬件方面需增加相应的电路,而且在软件方面必须编制中断服务程序。DMA方式,程序中断方式中CPU在响应中断请求后,必须停止现行程序而转入中断服务程序,并且为了完成IO设备与主存交换信息,还不得不占用CPU内部的一些寄存器
阅读全文
摘要:强调异常处理和提供丰富的异常处理的API类,是Java语言的又一个显著特点。异常处理类的继承图所有的API异常处理类都是Throwable的子类,而Throwable子类又派生两个子类Error和ExceptionError由系统保留,如动态链接错误(LinkageError)、虚拟机错误等,由Java虚拟机生成并抛出,通常java虚拟机不对这类异常处理。而只有Exception类的后代才可以被抛出,供应用程序使用。另外,所有Error类和RuntimeException类继承而来的子类都属于非检查性异常处理类。从RuntimeException继承而来的常用的类有:ArithmeticExc
阅读全文
摘要:主存的基本组成:现代计算机的主存都由半导体集成电路构成,图中的驱动器、译码器和读写电路均制作在主存储器芯片中,而MAR和MDR制作在CPU芯片内。存储芯片和CPU芯片可通过总线连接。存储体是一个由存储单元按照一定规则排列起来的存储阵列。存储体是存储器的核心,是存储信息的实体。半导体存储芯片的基本结构:译码驱动能把地址总线送来的地址信号翻译成对应存储单元的选择信号,该信号在读/写电路的配合下完成对被选中单元的读/写操作;读写电路包括读出放大器和写入安陆,用来完成读/写操作。半导体存储芯片的译码驱动方式:线选法,特点是用一根字选择线(字线),直接选中一个存储单元的各位。结构简单,是适用于容量不大的
阅读全文
摘要:目录属性的意义 那么r、w、x对于目录是什么意义呢,简单的来说: r(read contents in directory):表示具有读取目录结构清单的权限,所以当你具有目录的r权限时,你可以利用ls来显示目录的列表内容; w(modify contents in diretory):这个可写入的权限对目录来说,是很了不起的!拥有以下权限:建立新的档案与目录;删除已存在的档案或目录(无论该档案属于谁!);将已存在的档案或目录进行更名;搬移该目录内的档案、目录位置; x(access directory):这个x与能否进入该目录有关!Linux档案的种类正规档案 (regular file ):
阅读全文
摘要:档案(文件)属性,通过命令ls -al可以查看,结果如上图,我们选择其中之一加以分析:-rw-rw-r-- 1 xhj xhj 7 2013-03-26 19:40 file.tmp第一栏:-rw-rw-r--由十个字符组成,第一个属性代表这个档案是『目录、档案或连结文件等等』:当为[ d ]则是目录,例如上表的第 11 行;当为[ - ]则是档案,例如上表的第 5 行;若是[ l ]则表示为连结档(link file);若是[ b ]则表示为装置文件里面的可供储存的接口设备;若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标。接下来的属性中,三个为一组,且均为『rwx』 的三个
阅读全文
摘要:不为考试,再读唐朔飞,唐教授的《计算机组成原理》一书。指令和数据以同等地位存放于存储器内,并可按地址寻访;指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置;主存储器(简称主存或内存)包括存储体M、各种逻辑部件及控制电路等。存储体由许多存储单元组成,每个存储单元又包含若干个存储元件(或称存储基元、存储元),每个存储元件都寄存一位二进制代码“0”或“1”;主存的工作方式就是按存储单元的地址号来实现对存储字各位的存、取。这种存取方式成为按地址存取方式,即按地址访问存储器(简称访存);为实现按地址访问的方式,主存中还必须配置两个寄存器MAR和MDR。MAR(Me
阅读全文