10 2012 档案
摘要:线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括: 1.线程ID 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标 识线程。 2.寄存器组的值 由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线 程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便 将来该线程在被重新切换到时能得以恢复。 3.线程的堆栈 堆栈是保证线程独立运
阅读全文
摘要:一、迭代器的概念迭代器是STL将数据容器和算法分开后连接的纽带,也是泛型思维发展的必然结果。泛型算法就是通过迭代器操作容器的,使得算法和容器本身分离开来。迭代器模式:提供一种方式,可以依次访问一个聚合物(容器)中所有元素而不暴露聚合物内部的表达方式。迭代器类似与智能指针,但是它一般不会对所指向的元素进行释放空间,因为迭代器只是在指针外面包裹一层外加一些操作。迭代器最重要编码工作是完成一些操作符的重载,这些重载都是针对指针类型的操作,例如,++,——,*,->等,不同类型的迭代器完成的功能都不相同,详解见下文。迭代器定义的位置最好是在容器内,将定义的任务交给了容器的设计者,因为每一种容器都
阅读全文
摘要:为了提高操作系统的可适应性和可扩展性,目前几乎所有的操作系统都实现了设备的独立性(Device Independence)(也称为设备无关性)。用户程序的设备独立性是:用户程序不直接使用物理设备名(或设备的物理地址),而只能使用逻辑设备名;而系统在实际执行时,将逻辑设备名转换为某个具体的物理设备名,实施I/O操作。I/O软件的设备独立性是:除了直接与设备打交道的低层软件之外,其他部分的软件并不依赖于硬件。I/O软件独立于设备,就可以提高设备管理软件的设计效率。I/O软件采用分层结构,它把软件组织成为一系列的层,低层参与隔离硬件特征,使其它部分软件不依赖硬件;而高层则参与向用户提供一个友好的、清
阅读全文
摘要:一、设备分配的策略为了使系统能够安全高效地工作,系统在进行设备分配时应考虑的因素有:⑴设备的固有属性;⑵设备的分配算法;⑶设备分配的安全性。1.根据设备的固有属性而采取的策略在分配设备时,首先应考虑设备的属性。根据设备的固有属性采取以下三种策略:(1)独享方式独享方式是指将一个设备分配给某进程后,便一直由它独占,直至该进程完成或释放该设备为止,系统才能将该设备分配给其它进程使用。这种分配方式是对独占设备采用的分配策略。它不仅往往造成设备利用率低,而且还会引起系统死锁。(2)共享方式共享方式是指将共享设备(磁盘)同时分配给多个进程使用。但是这些进程对设备的访问需进行合理的调度。(3)虚拟方式虚拟
阅读全文
摘要:一、学习IO控制方式之前首先学习IO系统结构组成。1.大、中、小型计算机的硬件组织 小型到大型的计算机系统多由中央处理机(CPU)、输入输出处理机(又称通道)、存储器和输入输出设备组成,图1-1是一个典型中型计算机(IBM370)的硬件组织,这类计算机以存储器为中心,CPU和各种通道都与存储器相连,CPU执行的程序和数据都存放在存储器中并从存储器中取来执行。CPU需要与输入输出设备交换数据时,不能直接从输入输出设备中取(或存)数据,它必须命令通道来负责进行管理和控制数据输入输出,把数据输入到存储器或从存储器输出。2.微型计算机的典型组织 微型计算机是以总线为纽带来构成计算机系统,中央处理机..
阅读全文
摘要:一、设备的分类1、按照设备传输速率分类(1)低速设备:传输速率在几字节到几百字节的设备,如鼠标、键盘灯输入输出设备。(2)中速设备:指传输速率在每秒钟数千个字节至数十千个字节的设备。典型的设备有行式打印机、激光打印机等(3)高速设备:指传输速率在数百千个字节至数兆字节的设备。典型的设备有磁带机、磁盘机、光盘机等存储设备。2、按功能分类(1)输入输出设备:键盘、鼠标、显示器、打印机等设备,主要的任务就是输入或者输出。(2)存储设备:磁带机、磁盘、光盘机,他们同时是输入输出设备,但是主要的功能是进行存储。3、按数据传输的单位分类(1)块设备(Block Device):指以数据块为单位来组织和传送
阅读全文
摘要:设备管理一般指的是计算机外部设备,主要功能有设备分配、设备映射、设备驱动、I\O缓冲区的管理等。设备分配:用户进程不能直接使用设备,必须通过操作系统的分配和调度完成对设备的操作。操作系统对提出申请使用设备的进程使用分配算法,按照一定的策略为用户分配设备,并且记录设备的使用情况。设备映射:操作系统要求程序中对设备的引用不能通过物理名称指定,这样做是为了提高应用软件对设备的适应性。应用软件不应该知道将会使用到的具体哪一台设备,由操作系统调度。因此,设备的名称有了逻辑名称和物理名称,逻辑名称是在程序中使用的,每一类设备使用统一的命名规则,物理名称则是实际用户可见的设备。操作系统必须完成从逻辑名称到物
阅读全文
摘要:因为很多编译器在编译程序的过程是对程序进行优化,将程序中的变量值存储在缓存中以提高运行效率,这就可能出现这样的情况,用的到变量值不是最新的,而是已经存在在缓存中的值,这样就可能出现莫名其妙的错误,所以对一些易变的变量,加上violate 修饰,编译器在编译过程中就不会对读写这个变量就不会进行优化比如两个线程在运行中。第一个线程已经初始化,将变量a载入了缓存后,这时候第二个线程改变了a的值。如果a没有用volatile修饰的话,那么可能在第一个线程中使用a时,还是使用的缓存中没有改变过的值。(这只是一个可能性,因为多线程的运行谁都不能保证结果是什么,这是与不同的系统有关的)。如果使用了volat
阅读全文
摘要:在imperfect c++里,书里是这样解释POD的:1、 所有标量类型(基本类型和指针类型)、POD结构类型、POD联合类型、以及这几种类型的数组、const/volatile修饰的版本都是POD类型。2、 POD结构/联合类型:一个聚合体(包括class),它的非static成员都不是pointer to class member、 pointer to class member function、非POD结构、非POD联合,以及这些类型的数组、引用、const/ volatile修饰的版本; 并且,此聚合体不能有用户自定义的构造函数、析构函数、拷贝构造函数.POD结构(P...
阅读全文
摘要:STL全称为标准模板库,它是一套程序库,是一个框架,是一个架构,不仅仅提供了大量的数据结构和算法,还带给我们一个高层次的、以泛型编程为基础的、系统化的、组件化设计的方法。STL是基于泛型编程架设起来的概念结构,它分成几个大部分,每个部分之间由接口、迭代器或适配器连接起来,形成了一个完整的架构。STL提供了六大组件:容器、迭代器、算法、仿函数、配接器(适配器)、配置器。其中容器、算法和迭代器主要用于应用,仿函数和适配器主要用于连接和算法的策略,配置器主要为容器进行内存管理。容器是各种数据结构,比如vector、list、deque、set、map、hash等。算法是一些函数模板用于容器,比如排序
阅读全文
摘要:在将页面算法置换算法之前,首先需要了解系统如何分配给每个进程内存空间,即为每个进程分配多少个页框驻留进程。分配到的页框称为驻留集。有两种方法:固定驻留策略和动态驻留策略。固定驻留策略指为每个进程分配固定的页框数,不能增减,也不能使用别的进程的空间动态驻留策略指在进程活跃期间,系统可以根据进程的缺页率进行动态调整,进程的页框数可以增减。这样就有两个问题:页框置换的范围,如何选择置换出内存的页框。页框置换有局部置换和全局置换,局部置换仅限于本进程的空间中,全局置换则允许置换别的进程中的页框。固定驻留策略必然导致局部置换,而全局置换必须使用动态驻留策略。第一个问题解决,第二个问题则涉及到置换算法,坏
阅读全文
摘要:内存存储管理技术分为简单存储管理技术和虚拟存储管理技术,区别在于简单存储管理技术一次性的将进程的程序和数据装入内存,而虚拟存储管理技术则允许一部分程序和数据装入内存开始执行。从内存分配的连续性上,存储管理技术又分为连续存储和非连续存储,其中非连续存储分为分页存储、分段存储和段页式存储。连续存储则是上几次内存管理学习内容中的主角,这里不再详细介绍。连续存储首先介绍连续存储中的越界保护问题,在连续存储系统中,将会为每个进程都分配两个寄存器来存储进程内存空间的基址和大小,分别为基址寄存器和界限寄存器。进程在装入内存后将自己所分配到的基址和尾址存放在pcb中,等待cpu调用时将这两个值放入寄存器中。当
阅读全文
摘要:程序执行的过程经历几个阶段:编译---链接---装入内存模块---执行阶段。源程序经过编译后成为目标文件模块,在经过链接库文件等后变成可执行文件。链接的方式有两种:静态链接和动态链接。静态链接指在执行前将所有的目标模块都链接到可执行文件中等待装入执行。动态链接分为装入时动态链接和执行时动态链接。动态链接允许程序不必形成完整的可执行文件,而是生成一个未完成链接的外部模块,等待装入。装入时动态链接指在装入时遇到外部模块连接查找相应的目标模块装入内存,这种方法仍然要将所有的链接模块都装入内存,知识将链接推迟到了装入时。执行时动态链接指在执行时遇到链接部分查找相应的模块装入内存,木有用处的模块将不会装
阅读全文
摘要:内存的划分分为静态划分和动态划分。都是连续内存存储技术,而非连续内存存储技术有分页、页段式分段。静态划分预先将物理内存划分为固定分区,当新进程装进内存,选择合适的空闲分区分配给进程。又称为固定分区法,分区的长度可以不同。管理分区使用分区使用表,表项的内容是分区编号(线性的)、分区大小、分区使用情况。按照分区大小从小到大方式排列。一种特殊的固定分区法:分页式划分。将内存划分为很小的页框,其中页框远小于上述的分区。两者的区别是:固定分区要求进程存进连续的内存空间,而分页式划分允许进程可以不连续存储在不同的页框。页框的管理使用空闲页框表,将连续空闲的页框集中管理。静态划分的缺点是会产生大量的内零头,
阅读全文
摘要:操作系统的存储管理包含内存管理和外存管理,外存管理涉及到外设管理,因此这里主要讲内存管理。从所周知,cpu直接从内存中读取置零和数据,而不会与外存进行交互,因此存储在外存的程序和数据(可执行文件)必须装入内存才能够执行,这就是冯.诺依曼存储思想。但是在多道程序操作系统中或者是存在大进程的情况下,物理内存不一定够用,为了扩展内存就发明了虚拟存储技术等扩展技术,将程序的一部存在外存上,等到使用时调入内存即可。扩展技术有覆盖、交换和虚拟存储技术。问题1:多道程序操作系统中,程序的装入时一次性还是先装入一部分然后边执行边装入?若一次行装入内存不足,若边执行边装入效率低下。答1:现在系统多采用虚拟存储管
阅读全文
摘要:一、分别编译与链接(Linking)大多数高级语言都支持分别编译,程序员可以显式地把程序划分为独立的模块或文件,然后每个独立部分分别编译。在编译之后,由链接器把这些独立的片段(称为编译单元)“粘接到一起”。(想想这样做有什么好处?)在C/C++中,这些独立的编译单元包括obj文件(一般的源程序编译而成)、lib文件(静态链接的函数库)、dll文件(动态链接的函数库)等。静态链接方式:在程序执行之前完成所有的组装工作,生成一个可执行的目标文件(EXE文件)。动态链接方式:在程序已经为了执行被装入内存之后完成链接工作,并且在内存中一般只保留该编译单元的一份拷贝。二、静态链接库与动态链接库先来阐述一
阅读全文
摘要:全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。首先来看看题目是如何要求的(百度迅雷校招笔试题)。用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列,如 abc 的全排列: abc, acb, bca, dac, cab, cba一.全排列的递归实现为方便起见,用123来示例下。123的全排列有123、132、213、231、312、32
阅读全文
摘要:构架和架构也就是通常所说的软件体系结构(software architecture)。体系结构一般包括三个部分:1、构件:用于描述计算。2、连接器:用于描述构件的连接部分。3、配置:将构件和连接器组成一个有机整体********************************************************************************************软件框架(Software Framework)介绍面向某领域(包括业务领域,如ERP,和计算领域,如GUI)的、可复用的“半成品”软件,它实现了该领域的共性部分,并提供一系列定义良好的可变点以保证灵活性
阅读全文
浙公网安备 33010602011771号