精华内容
下载资源
问答
  • ROM、RAM、DRAM、SRAM、FLASH区别?ROM和RAM指都是半导体存储器,ROM是Read Only Memory缩写,RAM...ROM在系统停止供电时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型RAM就是计算机的内存
  • 特点 编译器不能自动发现这类错误,通常是在程序运行时才能捕捉到 时隐时现,无明显症状 分类 1 内存分配未成功,却使用了它 起因 没有意识到内存分配会不成功 编程新手容易犯 解决对策 在使用内存之前,检查...

    操作系统复习

    特点

    编译器不能自动发现这类错误,通常是在程序运行时才能捕捉到

    时隐时现,无明显症状

    分类

    1 内存分配未成功,却使用了它

    起因 没有意识到内存分配会不成功 编程新手容易犯

    解决对策 在使用内存之前,检查指针是否为空指针(NULL)

    char *p = (char *) malloc(100);  
    if (p == NULL) 
        {
            printf("No enough memory!\n");
            exit(0); 
        }
    View Code

     

     

    2 内存分配成功,但是尚未初始化就引用它

    起因 没有初始化的观念 误以为内存的默认值全为0

    实际情况 

    内存的缺省初值究竟是什么并没有统一的标准。但是对于全局变量和静态变量如果没有手工初始化,编译器会将其初始化为零,而对栈内存和堆内存则不作任何处理。

    另外,VC在Debug和Release状态下在初始化变量时所做的操作是不同的。Debug是将每个字节位都赋值成0xcc,以有利于调试。而Release的赋值是直接从内存中分配的,内容近似于随机。所以如果在没有初始化变量的情况下去使用它的值,就会导致问题发生。

    解决对策 即使是赋0值也不可省略,不要嫌麻烦

     

     

    3 内存分配成功,并且已经初始化,但操作越过了内存的边界

    内存分配成功,并且已经初始化,但操作越过了内存的边界 例如:使用数组时经常发生下标“多1”或者“少1”的操作

    解决对策: 在for语句中,注意循环次数不要搞错

    访问越界会出现什么结果?

    首先,它并不会造成编译错误! 就是说,C/C++的编译器并不判断和指出代码“访问越界”了。此外,数组访问越界在运行时,它的表现是不定的,有时似乎什么事也没有,程序一直运行(当然,某些错误结果已造成);有时,则是程序一下子崩溃。

     

     

    4 忘记了释放内存,造成内存泄漏

    忘记释放内存,造成内存泄漏(Memory Leak) “内存泄露”一词类似“原料泄露” 泄露出去的原料不能被利用,导致生产过程中原料不足。好比借东西不还 如果申请来的内存不用,别的程序也不能用,就好像这块内存泄露出去一样,造成浪费。

    以下这段小程序演示了堆内存发生泄漏的情形:

    void MyFunction(int nSize)
    {
    char* p= new char[nSize];
    
    if( !GetStringFrom( p, nSize ) ){
    MessageBox(“Error”);
    return;
    }
    …//using the string pointed by p;
    delete p;
    }
    View Code

    当函数GetStringFrom()返回零的时候,指针p指向的内存就不会被释放。这是一种常见的发生内存泄漏的情形。程序在入口处分配内存,在出口处释放内存,但是C函数可以在任何地方退出,所以一旦对分支处理不完整或者错误处理不当的话,就会发生内存泄漏。虽然函数体内的局部变量在函数结束时自动消亡,但是局部的指针变量所指向的内存并不会被自动释放。

    含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,可能看不到错误,但终有一次程序突然死掉,系统出现提示:内存耗尽。

    动态内存的申请与释放必须配对,如果程序在入口处动态申请了内存,那么在程序的每个出口处都必须释放该内存空间。

    解决对策

    在需要的时候才malloc,并尽量减少malloc的次数 malloc的执行效率就不高,过多的malloc使程序性能下降 能用自动变量解决的问题,就不要用malloc来解决 malloc一般在大块内存分配和动态内存分配时使用

    重复使用malloc申请到的内存

    尽量让malloc和与之配套的free在一个函数或模块内 尽量把malloc集中在函数的入口处,free集中在函数的出口处

     

     

    5 释放了内存,却继续使用它

    free(ptr);        
    if (ptr != NULL) //不起作用
    {
        …
    }
    View Code

    起因: 指针所指的内存被释放以后,并不表示指针会消亡 其地址仍然不变(非NULL),只是该地址对应的内存是垃圾 指向垃圾内存的指针是“野指针”

    有三种情况:

    (a) 程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。

    (b) 函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。

    (c) 使用free释放了内存后,没有将指针设置为NULL。导致产生“野指针”,即不是NULL指针,而是指向“垃圾”内存的指针。“野指针”是很危险的,因为使用if语句进行判断对它不起作用。

    char *p = (char *) malloc(100);
    
    strcpy(p, “hello”);
    free(p);        // p 所指的内存被释放,但是p所指的地址仍然不变
    if(p != NULL)    // 没有起到防错作用
    
    {
        strcpy(p, “world”);    // 出错
    }
    View Code

    解决对策

    尽量把malloc集中在函数的入口处,free集中在函数的出口处

    如果free不能放在函数出口处,则指针free后立即设置为NULL

    不要把局部变量的地址作为返回值返回,因为该内存在函数体结束时被自动销毁

    指针要么初始化为NULL,要么是其指向合法的内存

    非法内存操作

    起因

    内存分配未成功,却使用了它

    内存分配成功,但是尚未初始化就引用它

    内存分配成功,并且已经初始化,但操作越过了内存的边界

    释放了内存,却继续使用它

    基本特征

    代码访问了不该访问的内存地址

    后果

    几乎全是由指针混乱导致的

    少数情况下,如在硬件驱动程序中的内存问题会造成操作系统的死亡

    转载于:https://www.cnblogs.com/vincentqliu/p/6858475.html

    展开全文
  • 常见病毒及其特点

    2010-08-01 21:00:00
    常见计算机病毒的分类: (一)按寄生方式分为引导型、病毒文件型病毒和复合型病毒 引导型病毒是指寄生在磁盘引导区或主引导区的计算机病毒。此种病毒利用系统引导时,不对主引导区的内容正确与否进行判别的缺点,在...

    常见计算机病毒的分类:

    (一)按寄生方式分为引导型、病毒文件型病毒和复合型病毒
    引导型病毒是指寄生在磁盘引导区或主引导区的计算机病毒。此种病毒利用系统引导时,不对主引导区的内容正确与否进行判别的缺点,在引导型系统的过程中侵入系统,驻留内存,监视系统运行,待机传染和破坏。按照引导型病毒在硬盘上的寄生位置又可细分为主引导记录病毒和分区引导记录病毒。主引导记录病毒感染硬盘的主引导区,如大麻病毒、2708病毒、火炬病毒等;分区引导记录病毒感染硬盘的活动分区引导记录,如小球病毒、Girl病毒等。
    文件型病毒是指能够寄生在文件中的计算机病毒。这类病毒程序感染可执行文件或数据文件。如1575/1591病毒、848病毒感染.COM和.EXE等可执行文件;Macro/Concept、Macro/Atoms等宏病毒感染.DOC文件。
    复合型病毒是指具有引导型病毒和文件型病毒寄生方式的计算机病毒。这种病毒扩大了病毒程序的传染途径,它既感染磁盘的引导记录,又感染可执行文件。当染有此种病毒的磁盘用于引导系统或调用执行染毒文件时,病毒都会被激活。因此在检测、清除复合型病毒时,必须全面彻底地根治,如果只发现该病毒的一个特性,把它只当作引导型或文件型病毒进行清除。虽然好像是清除了,但还留有隐患,这种经过消毒后的“洁净”系统更赋有攻击性。这种病毒有Flip病毒、新世际病毒、One-half病毒等。
    (二)按破坏性分为良性病毒和恶性病毒
    良性病毒是指那些只是为了表现自身,并不彻底破坏系统和数据,但会大量占用CPU时间,增加系统开销,降低系统工作效率的一类计算机病毒。这种病毒多数是恶作剧者的产物,他们的目的不是为了破坏系统和数据,而是为了让使用染有病毒的计算机用户通过显示器或扬声器看到或听到病毒设计者的编程技术。这类病毒有小球病毒、1575/1591病毒、救护车病毒、扬基病毒、Dabi病毒等等。还有一些人利用病毒的这些特点宣传自己的政治观点和主张。也有一些病毒设计者在其编制的病毒发作时进行人身攻击。
    恶性病毒是指那些一旦发作后,就会破坏系统或数据,造成计算机系统瘫痪的一类计算机病毒。这类病毒有黑色星期五病毒、火炬病毒、米开朗?基罗病毒等。这种病毒危害性极大,有些病毒发作后可以给用户造成不可挽回的损失。


    计算机病毒最常见的有哪几种类型?
    大家有没有想到过有的病毒可以钻到别的程序的“身体”里面?有的病毒能够取其他程序的部分而代之?这些就是病毒辞典将要讲到的内容。这次给大家带来的是“DOS病毒”、“Windows病毒”、“入侵型病毒”、“嵌入式病毒”、“外壳类病毒”和“病毒制造工具”。

    DOS病毒:

    指针对DOS操作系统开发的病毒。目前几乎没有新制作的DOS病毒,由于Win9x病毒的出现,DOS病毒几乎绝迹。但DOS病毒在Win9x环境中仍可以进行感染活动,因此若执行染毒文件,Win9x用户也 会被感染。我们使用的杀毒软件能够查杀的病毒中一半以上都是DOS病毒,可见DOS时代DOS病毒的泛滥程度。但这些众多的病毒中除了少数几个让用户胆战心惊的病毒之外,大部分病毒都只是制作者出于好奇或对公开代码进行一定变形而制作的病毒。

    Windows病毒:

    主要指针对Win9x操作系统的病毒。现在的电脑用户一般都安装Windows系统 Windows病毒一般感染Win9x系统,其中最典型的病毒有CIH病毒。但这并不意味着可以忽略系统是WinNT系列包括 Win2000 的计算机。一些Windows病毒不仅在Win9x上正常感染,还可以感染WinNT上的其它文件。主要感染的文件扩展名为EXE SCR DLL OCX等。

    入侵型病毒:

    可用自身代替正常程序中的部分模块或堆栈区。因此这类病毒只攻击某些特定程序,针对性强。一般情况下难以发现,清除起来较困难。

    嵌入式病毒:

    这种病毒将自身代码嵌入到被感染文件中,当文件被感染后,查杀和清除病毒都非常不易。不过编写嵌入式病毒比较困难,所以这种病毒数量不多。

    外壳类病毒:

    这种病毒将自身代码附着于正常程序的首部或尾部。该类病毒的种类繁多,大多感染文件的病毒都是这种类型。

    病毒生成工具:

    通常是以菜单形式驱动,只要是具备一点计算机知识的人,利用病毒生成工具就可以像点菜一样轻易地制造出计算机病毒,而且可以设计出非常复杂的具有偷盗和多形性特征的病毒。
    很多时候大家已经用杀毒软件查出了自己的机子中了例如Backdoor.RmtBomb.12 、Trojan.Win32.SendIP.15 等等这些一串英文还带数字的病毒名,这时有些人就懵了,那么长一串的名字,我怎么知道是什么病毒啊?

    其实只要我们掌握一些病毒的命名规则,我们就能通过杀毒软件的报告中出现的病毒名来判断该病毒的一些公有的特性了。

    世界上那么多的病毒,反病毒公司为了方便管理,他们会按照病毒的特性,将病毒进行分类命名。虽然每个反病毒公司的命名规则都不太一样,但大体都是采用一个统一的命名方法来命名的。一般格式为:<病毒前缀>.<病毒名>.<病毒后缀> 。

    病毒前缀是指一个病毒的种类,他是用来区别病毒的种族分类的。不同的种类的病毒,其前缀也是不同的。比如我们常见的木马病毒的前缀 Trojan ,蠕虫病毒的前缀是 Worm 等等还有其他的。

    病毒名是指一个病毒的家族特征,是用来区别和标识病毒家族的,如以前著名的CIH病毒的家族名都是统一的“ CIH ”,还有近期闹得正欢的振荡波蠕虫病毒的家族名是“ Sasser ”。

    病毒后缀是指一个病毒的变种特征,是用来区别具体某个家族病毒的某个变种的。一般都采用英文中的26个字母来表示,如 Worm.Sasser.b 就是指 振荡波蠕虫病毒的变种B,因此一般称为 “振荡波B变种”或者“振荡波变种B”。如果该病毒变种非常多(也表明该病毒生命力顽强 ^_^),可以采用数字与字母混合表示变种标识。

    综上所述,一个病毒的前缀对我们快速的判断该病毒属于哪种类型的病毒是有非常大的帮助的。通过判断病毒的类型,就可以对这个病毒有个大概的评估(当然这需要积累一些常见病毒类型的相关知识,这不在本文讨论范围)。而通过病毒名我们可以利用查找资料等方式进一步了解该病毒的详细特征。病毒后缀能让我们知道现在在你机子里呆着的病毒是哪个变种。

    下面附带一些常见的病毒前缀的解释(针对我们用得最多的Windows操作系统):

    1、系统病毒

    系统病毒的前缀为:Win32、PE、Win95、W32、W95等。这些病毒的一般公有的特性是可以感染windows操作系统的 *.exe 和 *.dll 文件,并通过这些文件进行传播。如CIH病毒。

    2、蠕虫病毒

    蠕虫病毒的前缀是:Worm。这种病毒的公有特性是通过网络或者系统漏洞进行传播,很大部分的蠕虫病毒都有向外发送带毒邮件,阻塞网络的特性。比如冲击波(阻塞网络),小邮差(发带毒邮件) 等。

    3、木马病毒、黑客病毒

    木马病毒其前缀是:Trojan,黑客病毒前缀名一般为 Hack 。木马病毒的公有特性是通过网络或者系统漏洞进入用户的系统并隐藏,然后向外界泄露用户的信息,而黑客病毒则有一个可视的界面,能对用户的电脑进行远程控制。木马、黑客病毒往往是成对出现的,即木马病毒负责侵入用户的电脑,而黑客病毒则会通过该木马病毒来进行控制。现在这两种类型都越来越趋向于整合了。一般的木马如QQ消息尾巴木马 Trojan.QQ3344 ,还有大家可能遇见比较多的针对网络游戏的木马病毒如 Trojan.LMir.PSW.60 。这里补充一点,病毒名中有PSW或者什么PWD之类的一般都表示这个病毒有盗取密码的功能(这些字母一般都为“密码”的英文“password”的缩写)一些黑客程序如:网络枭雄(Hack.Nether.Client)等。

    4、脚本病毒

    脚本病毒的前缀是:Script。脚本病毒的公有特性是使用脚本语言编写,通过网页进行的传播的病毒,如红色代码(Script.Redlof)——可不是我们的老大代码兄哦 ^_^。脚本病毒还会有如下前缀:VBS、JS(表明是何种脚本编写的),如欢乐时光(VBS.Happytime)、十四日(Js.Fortnight.c.s)等。

    5、宏病毒

    其实宏病毒是也是脚本病毒的一种,由于它的特殊性,因此在这里单独算成一类。宏病毒的前缀是:Macro,第二前缀是:Word、Word97、Excel、Excel97(也许还有别的)其中之一。凡是只感染WORD97及以前版本WORD文档的病毒采用Word97做为第二前缀,格式是:Macro.Word97;凡是只感染WORD97以后版本WORD文档的病毒采用Word做为第二前缀,格式是:Macro.Word;凡是只感染EXCEL97及以前版本EXCEL文档的病毒采用Excel97做为第二前缀,格式是:Macro.Excel97;凡是只感染EXCEL97以后版本EXCEL文档的病毒采用Excel做为第二前缀,格式是:Macro.Excel,依此类推。该类病毒的公有特性是能感染OFFICE系列文档,然后通过OFFICE通用模板进行传播,如:著名的美丽莎(Macro.Melissa)。

    6、后门病毒

    后门病毒的前缀是:Backdoor。该类病毒的公有特性是通过网络传播,给系统开后门,给用户电脑带来安全隐患。如54很多朋友遇到过的IRC后门Backdoor.IRCBot 。

    7、病毒种植程序病毒

    这类病毒的公有特性是运行时会从体内释放出一个或几个新的病毒到系统目录下,由释放出来的新病毒产生破坏。如:冰河播种者(Dropper.BingHe2.2C)、MSN射手(Dropper.Worm.Smibag)等。

    8.破坏性程序病毒

    破坏性程序病毒的前缀是:Harm。这类病毒的公有特性是本身具有好看的图标来诱惑用户点击,当用户点击这类病毒时,病毒便会直接对用户计算机产生破坏。如:格式化C盘(Harm.formatC.f)、杀手命令(Harm.Command.Killer)等。

    9.玩笑病毒

    玩笑病毒的前缀是:Joke。也称恶作剧病毒。这类病毒的公有特性是本身具有好看的图标来诱惑用户点击,当用户点击这类病毒时,病毒会做出各种破坏操作来吓唬用户,其实病毒并没有对用户电脑进行任何破坏。如:女鬼(Joke.Girlghost)病毒。

    10.捆绑机病毒

    捆绑机病毒的前缀是:Binder。这类病毒的公有特性是病毒作者会使用特定的捆绑程序将病毒与一些应用程序如QQ、IE捆绑起来,表面上看是一个正常的文件,当用户运行这些捆绑病毒时,会表面上运行这些应用程序,然后隐藏运行捆绑在一起的病毒,从而给用户造成危害。如:捆绑QQ(Binder.QQPass.QQBin)、系统杀手(Binder.killsys)等
    计算机病毒的基本特性及其常见的隐蔽工作

    2008年7月21日

    要做好反病毒技术的研究,首先要认清计算机病毒的特点和行为机理,为防范和清除计算机病毒提供充实可靠的依据。根据对计算机病毒的产生、传染和破坏行为的分析,总结出计算机病毒具有以下几个特点:
    (一) 非授权可执行性
    用户通常调用执行一个程序时,把系统控制交给这个程序,并分配给他相应系统资源,如内存,从而使之能够运行完成用户的需求。因此程序执行的过程对用户是透明的。而计算机病毒是非法程序,正常用户是不会明知是病毒程序,而故意调用执行。但由于计算机病毒具有正常程序的一切特性:可存储性、可执行性。它隐藏在合法的程序或数据中,当用户运行正常程序时,病毒伺机窃取到系统的控制权,得以抢先运行,然而此时用户还认为在执行正常程序。
    (二) 隐蔽性
    计算机病毒是一种具有很高编程技巧、短小精悍的可执行程序。它通常粘附在正常程序之中或磁盘引导扇区中,或者磁盘上标为坏簇的扇区中,以及一些空闲概率较大的扇区中,这是它的非法可存储性。病毒想方设法隐藏自身,就是为了防止用户察觉。
    (三)传染性
    传染性是计算机病毒最重要的特征,是判断一段程序代码是否为计算机病毒的依据。病毒程序一旦侵入计算机系统就开始搜索可以传染的程序或者磁介质,然后通过自我复制迅速传播。由于目前计算机网络日益发达,计算机病毒可以在极短的时间内,通过像 Internet这样的网络传遍世界。
    (四)潜伏性
    计算机病毒具有依附于其他媒体而寄生的能力,这种媒体我们称之为计算机病毒的宿主。依靠病毒的寄生能力,病毒传染合法的程序和系统后,不立即发作,而是悄悄隐藏起来,然后在用户不察觉的情况下进行传染。这样,病毒的潜伏性越好,它在系统中存在的时间也就越长,病毒传染的范围也越广,其危害性也越大。
    (五)表现性或破坏性
    无论何种病毒程序一旦侵入系统都会对操作系统的运行造成不同程度的影响。即使不直接产生破坏作用的病毒程序也要占用系统资源(如占用内存空间,占用磁盘存储空间以及系统运行时间等)。而绝大多数病毒程序要显示一些文字或图像,影响系统的正常运行,还有一些病毒程序删除文件,加密磁盘中的数据,甚至摧毁整个系统和数据,使之无法恢复,造成无可挽回的损失。因此,病毒程序的副作用轻者降低系统工作效率,重者导致系统崩溃、数据丢失。病毒程序的表现性或破坏性体现了病毒设计者的真正意图。
    (六)可触发性
    计算机病毒一般都有一个或者几个触发条件。满足其触发条件或者激活病毒的传染机制,使之进行传染;或者激活病毒的表现部分或破坏部分。触发的实质是一种条件的控制,病毒程序可以依据设计者的要求,在一定条件下实施攻击。这个条件可以是敲入特定字符,使用特定文件,某个特定日期或特定时刻,或者是病毒内置的计数器达到一定次数等。
    以上总结了计算机病毒的基本特性,下面列举计算机病毒的工作方式,达到病毒制造者的预期目的,有必要了解计算机病毒的破坏方式:
    1)禁用所有杀毒软件以相关安全工具,让用户电脑失去安全保障。
    2)破坏安全模式,致使用户根本无法进入安全模式清除病毒。
    3)强行关闭带有病毒字样的网页,只要在网页中输入"病毒"相关字样,网页遂被强行关闭,即使是一些安全论坛也无法登陆,用户无法通过网络寻求解决办法。
    4)在各磁盘根目录创建可自动运行的exe程序和autorun.inf文件,一般用户重装系统后,会习惯性的双击访问其他盘符,病毒将再次被运行。
    5)进入系统后修改注册表,让几乎所有安全软件不能正常使用。
    6)在用户无法察觉的情况下连接网络,自动在用户的电脑里下载大量木马、病毒、恶意软件、插件等。这些木马病毒能够窃取用户的帐号密码、私密文件等各种隐私资料。
    7)通过第三方软件漏洞、下载U盘病毒和Arp攻击病毒的方式进行疯狂扩散传播,造成整个局域网瘫痪。
    8)将恶意代码向真实的磁盘中执行修改覆盖目标文件,导致被修改覆盖的真实磁盘文件无法被还原,系统重新启动后,会再次下载安装运行之前的恶意程序,很难一次彻底清除。
    9)修改系统默认加载的DLL 列表项来实现DLL 注入。通过远程进程注入,并根据以下关键字关闭杀毒软件和病毒诊断等工具。
    10)修改注册表破坏文件夹选项的隐藏属性修改,使隐藏的文件无法被显示。
    11)自动下载最新版本和其它的一些病毒木马到本地运行。
    12)不断删除注册表的关键键值来来破坏安全模式和杀毒软件和主动防御的服务, 使很多主动防御软件和实时监控无法再被开启。
    13)病毒并不主动添加启动项,而是通过重启重命名方式。这种方式自启动极为隐蔽,现有的安全工具很难检测出来。
    14)病毒会感染除SYSTEM32 目录外其它目录下的所有可执行文件,并且会感染压缩包内的文件。
    15)除开可以在网络上利用邮件进行传播外,这些变种病毒还可以利用局域网上的共享文件夹进行传染,其传播特点类似“尼姆达”病毒,因此对于某些不能查杀局域网共享文件病毒的单机版杀毒软件,这将意味着在网络环境下,根本无法彻底清除病毒。
    以上总结了一下计算机病毒的特点和如何进行隐蔽工作,对于我们准确地捕获新病毒,以及分析和研究它的工作机理和特性,是有参考意义的总结经验,不分析它的隐藏的工作,就无法研制出防范和清除病毒的工具软件。

    展开全文
  • 在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间数据传输抽象表述为“流”,程序允许通过流方式与输入输出设备进行数据传输。Java中“流”都位于java.io包中,称之为IO(输入输出...

    IO流的概述

    大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象的表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。Java中的“流”都位于java.io包中,称之为IO(输入输出)流。
    输入流和输出流是相对于内存设备而言的,将外设中的数据读取到内存中即输入,将内存的数据写入到外设中即输出。

    IO流的特点

    IO流的特点:

    1. IO流用来处理设备之间的数据传输;
    2. Java对数据的操作是通过流(系统资源)的方式;
    3. Java用于操作流的对象都在java.io包中;
    4. 流按操作数据分为两种:字节流与字符流;
    5. 流按流向分为:输入流,输出流。

    流即系统资源,Windows系统本身就可以操作设备,各种语言只是使用了系统平台上的这个资源,并对外提供了各种语言自己的操作功能,这些功能最终调用的是系统资源,当我们使用完资源后一定要记住释放。

    IO流的三种分类方式

    在这里插入图片描述

    1. 按流的方向分为:输入流和输出流;
    2. 按流的数据单位不同分为:字节流和字符流;
    3. 按流的功能不同分为:节点流和处理流。

    IO流的层次结构

    IO流的常用基类有:

    1. 字节流的抽象基类:InputStream和OutputStream;
    2. 字符流的抽象基类:Reader和Writer。

    注意:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀,以前缀为其功能。例如,InputStream的子类——FileInputStream,Reader的子类——FileReader。

    InputStream

    在这里插入图片描述

    OutputStream

    在这里插入图片描述

    Reader

    在这里插入图片描述

    Writer

    在这里插入图片描述

    展开全文
  • 接下来,本文介绍了文档自动分类的意义和算法的分类,然后分别介绍了m-ary分类系统和Independent Binary分类系统常用的算法和各个算法的特点,接着介绍了从m-ary分类系统转换到Binary Independent分类系统常用的三...
  • 第11章动态数据结构C语言实现 常见的内存错误及其解决对策 第11章 动态数据结构C语言实现 常见的内存错误及其对策 分类 1内存分配未成功却使用了它 2内存分配成功但尚未初始化就引用它 3内存分配成功且已初始化...
  • Linux一个重要的特点就是其源代码公开性,所有内核源程序都可以在/usr /src/linux下找到,大部分应用软件也都是遵循GPL而设计,你都可以获取相应源程序代码。全世界任何一个软件工程师都可以将自己认为...

    内核简介

    内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

    Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr /src/linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取相应的源程序代码。全世界任何一个软件工程师都可以将自己认为优秀的 代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用。而Linux的内核则是这些特点的最直接的代表。

    想象一下,拥有了内核的源程序对你来说意味着什么?首先,我们可以了解系统是如何工作 的。通过通读源代码,我们就可以了解系统的工作原理,这在Windows下简直是天方夜谭。其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系 统,这样就需要重新编译内核。在Windows下是什么情况呢?相信很多人都被越来越庞大的Windows整得莫名其妙过。再次,我们可以对内核进行修 改,以符合自己的需要。这意味着什么?没错,相当于自己开发了一个操作系统,但是大部分的工作已经做好了,你所要做的就是要增加并实现自己需要的功能。在 Windows下,除非你是微软的核心技术人员,否则就不用痴心妄想了。

    内核版本号

    由于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发 布给他人使用。Linux的开发采用的是集市模型(bazaar,与cathedral--教堂模型--对应),为了确保这些无序的开发过程能够有序地进 行,Linux采用了双树系统。一个树是稳定树(stable tree),另一个树是非稳定树(unstable tree)或者开发树(development tree)。一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将 进行相同的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中;源程序版本号的形式为x.y.z:对于稳定树 来说,y是偶数;对于开发树来说,y比相应的稳定树大一(因此,是奇数)。到目前为止,稳定树的最高版本是2.2.16,最新发布的Redhat7.0所 采用的就是2.2.16的内核;开发树的最新版本是2.3.99。也许你已经发现和多网站上都有2.4.0-test9-pre7之类的内核,但是这并不 是正式版本。内核版本的更新可以访问http://www.kernel.org。

    为什么重新编译内核

    Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。

     通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。

    为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:

    l 自己定制编译的内核运行更快(具有更少的代码)。

    2 系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)。

    3 不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞。

    4 将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些。

    内核编译模式

    要增加对某部分功能的支持,比如网络之类,可以把相应部分编译到内核中(build- in),也可以把该部分编译成模块(module),动态调用。如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度 快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议 经常使用的部分直接编译到内核中,比如网卡。如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得 自己来调用这些模块。


    新版本内核的获取和更新

    Linux内核版本发布的官方网站是http://www.kernel.org,国内 各大ftp上一般都可以找到某些版本的内核。新版本的内核的发布有两种形式,一种是完整的内核版本,另外一种是patch文件,即补丁。完整的内核版本比 较大,比如linux-2.4.0-test8.tar.bz2就有18M之多,网速快的用户可以下载使用。完整内核版本一般 是.tar.gz(.tgz)文件或者是.bz2文件,二者分别是使用gzip或者bzip2进行压缩的文件,使用时需要解压缩。patch文件则比较 小,一般只有几十K到几百K,极少的会超过1M,网速慢的用户可以使用patch文件来升级内核。但是patch文件是针对于特定的版本的,你需要找到自 己对应的版本才能使用。

    编译内核需要root权限,以下操作都假定你是root用户。请把你需要升级的内核拷贝到/usr/src/下(下文中以2.4.0test8的内核的linux-2.4.0test8.tar.gz为例),命令为:

         #cp linux-2.4.0test8.tar.gz /usr/src
      

    让我们先来查看一下当前/usr/src的内容,注意到有一个linux的符号链接,它指向一个类似于linux-2.2.14(对应于你现在使用的内核版本号)的目录。首先删除这个链接:

         #cd /usr/src    #rm -f linux
      

    现在解压我们下载的源程序文件。如果所下载的是.tar.gz(.tgz)文件,请使用下面的命令:

         #tar -xzvf linux-2.4.0test8.tar.gz
      

    如果你所下载的是.bz2文件,例如linux-2.4.0test8.tar.bz2,请使用下面的命令:

         #bzip2 -d linux-2.4.0test8.tar.bz2    #tar -xvf linux.2.4.0.test8.tar   
     

    现在让我们再来看一下/usr/src下的内容,你会发现现在有了一个名为linux的目录,里 面就是我们需要升级到的版本的内核的源程序。还记得那个名为linux的链接么?之所以使用那个链接就是防止在升级内核的时候会不慎把原来版本内核的源程 序给覆盖掉了。我们也需要同样处理:

         #mv linux linux-2.4.0test8    #ln -s linux-2.4.0test8 linux   
     

    这样我们也有了一个名为linux的符号链接,就不用担心以后会把它覆盖掉了(也许你会觉得重新 建立linux的符号链接没有必要,但实际上这是必不可少的,下文中会有介绍)。如果你还下载了patch文件,比如patch-2.4.0test8, 你就可以进行patch操作(下面假设patch-2.4.0test8已经位于/usr/src目录下了,否则你需要先把该文件拷贝到/usr/src 下):

         #patch -p0 < patch-2.4.0test8
      

    现在,我们已经把内核源程序升级到最新版本了。

    准备工作

    通常要运行的第一个命令是:

         #cd /usr/src/linux;make mrproper
      

    该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。由于我们使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。

    确保/usr/include/目录下的asm、linux和scsi等链接是指向要升 级的内核源代码的。它们分别链向源代码目录下的真正的、该计算机体系结构(对于PC机来说,使用的体系结构是i386)所需要的真正的include子目 录。如:asm指向/usr/src/linux/include/asm-i386等。若没有这些链接,就需要手工创建,按照下面的步骤进行:

         # cd /usr/include/    # rm -r asm linux scsi    # ln -s /usr/src/linux/include/asm-i386 asm    # ln -s /usr/src/linux/include/linux linux    # ln -s /usr/src/linux/include/scsi scsi
      

    这是配置非常重要的一部分。删除掉/usr/include下的asm、linux和scsi链 接后,再创建新的链接指向新内核源代码目录下的同名的目录。这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。现在你应该明白为什么我 们上面又在/usr/src下"多余"地创建了个名为linux的链接了吧?下面就可以开始内核编译的旅程了。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    转载于:https://www.cnblogs.com/mao0504/p/4706957.html

    展开全文
  • COS全称是Chip Operating ...因为COS一般都是根据某种智能卡的特点及其应用范围而特定设计开发,尽管它们在所实际完成功能上可能大部分都遵循着同一个国际标准。其次,与那些常见微机上操作系统相比较而言,C
  • COS全称是Chip Operating ...因为COS一般都是根据某种智能卡的特点及其应用范围而特定设计开发,尽管它们在所实际完成功能上可能大部分都遵循着同一个国际标准。其次,与那些常见微机上操作系统相比较而言,C
  •  1.1 汇编语言由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言主要特点  5 汇编语言使用领域  1.2 数据表示和类型  1 数值数据表示  2 非数值数据表示  3 基本数据类型 ...
  • 队列的特点:先入先出(FIFO) 例子: 火车站买票时,队头队尾。售票员从头开始卖票,先到人先买到票就可以离开。 分类:普通队列与环形队列 1.1 普通队列 普通队列添加元素较为简单,直接队列尾后移; 普通队列...
  • 文中介绍了CAN总线及其主要特点,提出了一种CAN总线通信适配卡设计方案,同时介绍了该CAN总线通信适配卡软、硬件实现过程。 关键词:CAN总线; 双口RAM; 内存映射 分类号:TP336 文献标识码:B 文章编号:...
  •  1.1 汇编语言由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言主要特点  5 汇编语言使用领域  1.2 数据表示和类型  1 数值数据表示  2 非数值数据表示  3 基本数据类型 ...
  •  1.1 汇编语言由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言主要特点  5 汇编语言使用领域  1.2 数据表示和类型  1 数值数据表示  2 非数值数据表示  3 基本数据类型 ...
  •  1.1 汇编语言由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言主要特点  5 汇编语言使用领域  1.2 数据表示和类型  1 数值数据表示  2 非数值数据表示  3 基本数据类型 ...
  •  1.1 汇编语言由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言主要特点  5 汇编语言使用领域  1.2 数据表示和类型  1 数值数据表示  2 非数值数据表示  3 基本数据类型 ...
  • 可以在管理页面上添加博文的分类,可以上传图片和游览自己的相册,在上传过程中可以将一张图片定义为自己的签名,在个人管理页面中注册用户还可以修改自己的个人信息。博文管理,友情链接管理及博文分类管理,用例图...
  •  1.1 汇编语言由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言主要特点  5 汇编语言使用领域  1.2 数据表示和类型  1 数值数据表示  2 非数值数据表示  3 基本数据类型 ...
  • 可以在管理页面上添加博文的分类,可以上传图片和游览自己的相册,在上传过程中可以将一张图片定义为自己的签名,在个人管理页面中注册用户还可以修改自己的个人信息。博文管理,友情链接管理及博文分类管理,用例图...
  • Java基础知识整理回顾

    2020-11-01 21:50:45
    1.1 Java发展及其特点 ​ **发展:**Java前身是Oak语言,它是由SUN公司“Green”小组对C++进行改造,去除了C++复杂指针和内存管理,并结合嵌入式系统实时性要求,从1991年开始,历时一年,在1992年时开发...
  • DotNet Multithread

    2016-09-28 20:45:00
    4、线程的分类及其特点。5、线程资源分配。 1)内存: 2)CPU:6、线程上下文是什么。7、C#中怎样创建和使用线程。8、线程同步原理及C#线程同步实现。 9、C#多线程操作相关DLL和类有哪些,及各自使用场景。10、在软件...
  • 汇编语言教程

    2015-12-29 14:44:50
     1.1 汇编语言由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言主要特点  5 汇编语言使用领域  1.2 数据表示和类型  1 数值数据表示  2 非数值数据表示  3 基本数据类型 ...
  • JVM垃圾收集器G1

    2021-05-09 15:58:59
    G1是面向服务器的垃圾收集器,主要针对配备多核处理以及大容器内存的及其,极高概率满足GC停顿时间要求,还具备高吞吐量特征; G1将Java堆划分为多个大小相等的独立区域Region,JVM最多可以有2048个Region; 一般...
  • 汇编语言学习大全

    2011-10-08 22:56:17
     1.1 汇编语言由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言主要特点  5 汇编语言使用领域  1.2 数据表示和类型  1 数值数据表示  2 非数值数据表示  3 基本数据类型 ...
  •  1.1 汇编语言由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言主要特点  5 汇编语言使用领域  1.2 数据表示和类型  1 数值数据表示  2 非数值数据表示  3 基本数据类型 ...
  • 80x86汇编语言教程

    2011-01-26 21:36:37
     1.1 汇编语言由来及其特点  1 机器语言  2 汇编语言  3 汇编程序  4 汇编语言主要特点  5 汇编语言使用领域  1.2 数据表示和类型  1 数值数据表示  2 非数值数据表示  3 基本数据类型 ...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 172
精华内容 68
关键字:

内存的分类及其特点