C语言写一个消灭星星小游戏的游戏,关于点击点向四周判断是否相同颜色的问题

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)&figure&&img src=&https://pic4.zhimg.com/v2-9a8e38d456ec6f19eafe_b.jpg& data-rawwidth=&575& data-rawheight=&288& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&https://pic4.zhimg.com/v2-9a8e38d456ec6f19eafe_r.jpg&&&/figure&&blockquote&前文介绍了中断的硬件基础,今天我们深入了解一下中断的软件逻辑和不同操作系统的中断策略以及UEFI中的中断实现,最后我们澄清些常常混淆的概念。&/blockquote&&h2&&b&中断处理流程&/b&&/h2&&p&正如我们前文讲到的,中断处理在8086时代就已经引入PC。我们就从这个“远古”的鼻祖说起。&/p&&p&&b&1。中断向量表&/b&&/p&&p&你有没有好奇过,0内存地址开始放了些什么东西呢?毕竟是最开始就要用的东西,一定非常重要!没错,那里就是中断向量表的家。在8086开始,中断向量表就占据这里,甚至在我们最新时髦的酷睿x代,它们还在这里。想不想看看这个顽固的家伙的样子?写个简单的 程序:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&long *p = (long *) 0;
printf(“%x”, *p);
&/code&&/pre&&/div&&p&运行下看看。不出所料你的程序将产生一个异常,导致被强制关闭。还记得我们前面讲过地址转换,这个0地址是虚拟地址而不是物理地址,在保护模式下0的虚拟地址访问会产生一个异常,你是访问不到物理0地址的。我们在内核模式使用一些技巧或者我们进入实模式,我们才能看到它们。每个中断向量(vector)占据4个字节,Intel定义了256个向量,共用去1KB的内存空间。每个向量朴实无华,就是一个地址,指向该中断(INT)处理函数的入口,这也是它起名vector的原因。整个中断向量表就是一个大函数指针表,一个中断发生,CPU硬件就来这里查表,跳到相应地址就行了,好方便!实际情况稍微复杂点,CPU还要保护现场,将当前环境保存起来(一些寄存器和返回地址等压栈),以便处理完后返回现场继续执行。不过相对于我们接下来的保护模式的中断处理简单很多。没错,这个史前遗迹只在实模式发挥作用,我们只草草看看它的样子就行了:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-26fa21263a85_b.jpg& data-caption=&& data-rawwidth=&564& data-rawheight=&252& class=&origin_image zh-lightbox-thumb& width=&564& data-original=&https://pic3.zhimg.com/v2-26fa21263a85_r.jpg&&&/figure&&p&&br&&/p&&p&这里主要是异常处理.&/p&&figure&&img src=&https://pic2.zhimg.com/v2-7bab2c22a4b44ed4cca70c6f63f4bfa4_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&258& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-7bab2c22a4b44ed4cca70c6f63f4bfa4_r.jpg&&&/figure&&p&硬件中断向量一区。和我们上文的8259连接两相对照一下:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c3a4bca202b8f6_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&436& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-c3a4bca202b8f6_r.jpg&&&/figure&&p&&br&&/p&&p&没错,这里就是主8259的IRQ的中断向量区。接下来就是BIOS保留区,作为介绍BIOS的专区,这里必须看一下:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-63e4fd066ac7_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-63e4fd066ac7_r.jpg&&&/figure&&p&&br&&/p&&p&PC传统Legacy BIOS的服务例程都在这里。看到它们不胜唏嘘,曾经INT 10H打字和INT 13H读写磁盘的美(YUAN)好(SHI)日子又浮现在眼前。。。不好,这是个暴露年龄的话题,后面我们就不讲了,下课。&/p&&p&&br&&/p&&p&开个玩笑,不过中断向量表今天也只在UEFI BIOS为了兼容传统OS启动的CSM模块中起作用,我们大致了解一下其中的原理即可。&/p&&p&&b&2.中断描述符&/b&&/p&&p&在PC进入保护模式,一个复杂但有很多妙处的机制代替了中断向量表,它就是中断描述符表(IDT,interrupt Descriptor Table)。IDT将每个中断或者异常与它的服务例程连接起来。IDT不再固定放在某个位置,而是可以放在IDTR寄存器指向的任意内存(说是任意,也不能太随性,有些小要求,如8字节对齐等),IDT的表项也从4个字节扩展到8个字节,大小也可以不满256,IDTR也指出了它的最大限制。如图:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-bab56b03d99fa84a58d5c05aba59efd6_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&345& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-bab56b03d99fa84a58d5c05aba59efd6_r.jpg&&&/figure&&p&&br&&/p&&p&IDT除了和中断向量一样指向一个例程地址之外,还包括其他一些信息:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-7eddcd62fda9ac00d779ef16_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&364& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-7eddcd62fda9ac00d779ef16_r.jpg&&&/figure&&p&&br&&/p&&p&其中的DPL(描述符特权级)与CS寄存器的CPL完成特权级的检查,可以避免低特权级的代码通过软件中断形式提权。它的运作形式和中断向量表类似,更多的是安全检查和可能的执行环境切换(例如ring 3 -& ring 0)。&/p&&p&&b&3.中断和异常&/b&&/p&&p&ARM体系中断和异常是单独处理的,IRQ中断只是异常列表里的一项而已。X86中断和异常处理却混杂在一起,使用同一套机制,看似比较混乱。其实异常往往是处理器内部发生的,是同步的;而中断却是外部事件,是异步的。而它们的分布也是不同的,0到31号向量保留给异常,而更高的则往往是硬件中断和软件中断。异常分为三种:错误,陷阱和中止。这三种类型CPU对它们有不同的处理原则:错误往往是可以恢复的,错误修正后再执行刚才的错误就不会出问题了,改了就是好同志嘛!例如常用于内存管理的缺页异常,OS常常把内存换出到硬盘,它会在页表上动些手脚,CPU再次访问这块内存会发生异常,OS页面错误异常例程捕获到后赶紧把内存换回来,然后返回原处执行,就像没事发生一样。陷阱是留给软件挖坑的,CPU希望软件自己挖的坑自己能填上,它可以装作没看见,从下条继续。典型的例子是INT 3,我们的几乎所有调试工具(VS,windbg,甚至UEFI的source level debugger)都用它添加软件断点。中止就严重了,意味着发生硬件错误了,它往往能造成Windows蓝屏,linux panic等。异常一览表如下:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e80f57c233de05d0c998c6109cad9478_b.jpg& data-caption=&& data-rawwidth=&495& data-rawheight=&556& class=&origin_image zh-lightbox-thumb& width=&495& data-original=&https://pic4.zhimg.com/v2-e80f57c233de05d0c998c6109cad9478_r.jpg&&&/figure&&p&&br&&/p&&p&20到31被预留将来使用。硬件中断往往就从32开始。&/p&&p&&b&4.中断优先级&/b&&/p&&p&PIC模式IRQ数目越低就意味着优先级越高。而在APIC模式下,IOAPIC连接的24个IRQ是平权的,先后并不关乎优先级高低。决定中断优先级的是它对应的中断向量的大小,X86体系有256个vector, 中断优先级的计算公式是:&/p&&p&优先级 = vector num / 16&/p&&p&即每16个中断一组,共享一个优先级,共16个。因为32以下vector被异常和保留占据,2到15是中断的优先级。数字越大越高优先级。中断优先级的控制是靠LAPIC的TPR(Task Priority Register,任务优先级寄存器)来控制的,它的结构如下:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-634cf81c5eef_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&135& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-634cf81c5eef_r.jpg&&&/figure&&p&&br&&/p&&p&TR只有4位标识可以接受的中断优先级,即16个。CPU内核只处理优先级比TR大的中断,也意味着TR每提高一个数字,就有16个中断被遮蔽!看来我们的中断要想被赶快处理,必须占个好位置。那么是不是IRQ数目越大,vector就越大呢?这是谁来决定的呢?这事可不由BIOS做主,OS是设置vector的主人。而不同的OS的处理也不近相同,我们具体看一下。&/p&&h2&中断处理实践&/h2&&p&Windows、Linux和BIOS在处理中断上有很多区别。我们从几个方面浮光掠影了解一二。&/p&&p&&b&1. 中断向量设置&/b&&/p&&p&PIC如何设置中断向量已经过时,我们就不提了。这里只介绍APIC模式,如果你还记得上节关于IOAPIC的内容,其中最重要的PRT表,它由24个RTE( RedirectionTableEntry)项组成,每一项对应一个IRQ引脚。它的内容除了上节介绍过的Destination Field之外,最低8位是该IRQ对应的vector,可以表示256个vector。OS根据自己的策略,为IRQ分配不同的vector。&/p&&p&&b&Windows&/b&&/p&&p&Windows的HAL在设置vector时是根据系统枚举硬件时挨个设置的,因为先枚举的设备其IRQ的大小不确定,所以优先级并无一定之规。从vector不能推导IRQ,IRQ也不能推导vector,可以说全凭运气。为硬件IRQ分配的vector往往从0x31开始分配,应该是为了配合Windows的IRQL概念。大家可以在windbg里输入命令&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!idt -a
&/code&&/pre&&/div&&p&查看一下自己机器的vector分配情况。这个IRQL比较让人混淆,实际上它并不是个硬件概念,和中断优先级并不同,它是微软定义的一套软件优先级方案。Windows用0到31来表示优先级,数值越大,优先级越高。如下图:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-a9d34944eaac9b7ea2b989_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&533& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-a9d34944eaac9b7ea2b989_r.jpg&&&/figure&&p&&br&&/p&&p&其中DPC/Dispatch是个分水岭,运行在这个优先级的线程不会被其他线程抢占。其上3到26是为了外围硬件保留的。最高的31显得很高大上,谁的地位这么高?你一定见过它,它就是在Windows蓝屏时的IRQL。HAL会把IRQL翻译到不同的硬件平台上,它和X86的中断优先级不是一个概念。&/p&&p&&b&Linux&/b&&/p&&p&Linux没有IRQL的概念,他的vector就从0x20(32)开始分配,但是因为0x80(128)因为历史原因,被保留做系统调用(后改用sysenter指令,但为了兼容,还是保留),整个空间被一份为二。后面到0xee(238)为止。因为vector的大小关系到优先级,分配的时候为了保证对各个IOAPIC公平,分配的时候在各个IOAPIC间轮流分配。大家可以在shell里输入以下命令查看一下中断向量的分配情况:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&cat /proc/interrupts
&/code&&/pre&&/div&&p&&b&2. IRQ在多处理器的分发&/b&&/p&&p&还有个问题十分重要。某个vector由哪个CPU内核负责处理呢?Linux为了公平起见,并不会对BSP(bootstrap processor)另眼看待,所有内核一视同仁。Linux通过填写IOAPIC的RTE中的Delivery mode选择最低优先级策略,让TRP都被初始化做固定值,因此IRQ信号就可以公平的在CPU之间分发。感觉很民主有没有?(分分钟被Linus的独裁作风打脸)。有时为了优化性能,我们可以通过Linux的IRQ亲缘性来让特定内核为我们服务。我们可以通过命令&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&cat /proc/irq/xx/smp_affinity
&/code&&/pre&&/div&&p&查看xx IRQ由谁处理,如果是f的话代表是缺省策略,即大家都可以处理。我们可以通过下面命令分配个专有内核处理&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&echo 2 &/proc/irq/xx/smp_affinity
&/code&&/pre&&/div&&p&让APIC ID为2的内核处理。或者通过一些Irqbalance类似的工具来帮我们配置。&/p&&p&&b&3.UEFI固件中的中断&/b&&/p&&p&UEFI固件内核中对异常和中断都有处理,还包含很多使用IPI调度内核的源程序,程序短小精干,包括大量注释。感兴趣的同学可以通过它学习中断处理和CPU内核调度。UEFI对中断的初始化和使用都在CPU的开发包里:&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/tianocore/edk2/tree/master/UefiCpuPkg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&tianocore/edk2&/a&&/p&&p&有几个地方值得注意,我们来一一看看。&br&&/p&&p&&b&异常&/b&&/p&&p&UEFI内核对IDT的初始化程序在UefiCpuPkg的Library/CpuExceptionHandlerLib下。内核为所有的的中断和异常都分配了统一的入口CommonExceptionHandler。它对任何中断和异常没有任何特殊处理,如果没有人对该中断或异常做处理就会dump一些现在的CPU状态如APIC ID, 异常类型等,然后调用CpuDeadLoop陷入死循环,这也是UEFI工程师常见的画面。UEFI驱动可以在自己关心的异常中添加自己的处理函数,如支持通过串口和USB源程序级调试UEFI程序的Source Level Debugger就是个典型的例子,它Hook住了很多异常,用于调试和捕捉错误,它在:&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/tianocore/edk2/tree/master/SourceLevelDebugPkg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&tianocore/edk2&/a&&/p&&p&&b&中断&/b& &/p&&p&UEFI的CSM模块还兼容以前BIOS使用的INT x软中断方式调用BIOS服务。随着UEFI的广泛推广和传统OS的渐渐淘汰,CSM也日薄西山,有些仅仅面向最新OS的项目都不含CSM的支持,所以关于它的内容这里略过。在保护模式下,UEFI内核仅仅对时钟中断进行了处理,并通过Timer Architectural Protocol开放出来供所有UEFI程序调用。也许你会好奇,那么多种USB设备和网卡等等的UEFI驱动难道不需要中断处理?是的,他们的中断在UEFI阶段都没有开启,他们的驱动通过Timer加Polling的方式来处理。举个例子,我们在UEFI Shell 下插入键盘,它能立刻起作用不是如在OS中USB控制器产生了中断。而是USB驱动注册了个Timer,过一会就Poll一下看看有没有新设备插入。就是这个Timer发现了新插入的键盘的。&/p&&p&这种仅仅依靠Timer的做法在OS阶段是行不通的,会带来严重的效能和功耗问题。但是在Boot阶段却问题不大,而且这样做保证了UEFI内核的简洁性。事实上,UEFI并不禁止驱动自己开启中断,但开启中断需要处理的中断共享、IOAPIC设置等等问题需要驱动自己解决,UEFI并不提供支持。&/p&&p&&b&IPI&/b&&/p&&p&内核可以通过写自己LAPIC的ICR(Interrupt Command Register)发出IPI((Inter-Processor Interrupt)调度别的内核完成任务,这也是任务调度的基本方法。事实上,因为APIC ID的不连续性,我们正是通过发送IPI的方法来统计内核的数量。BSP在启动时需要统计系统中可用的内核时,发送广播IPI,让大家都来报道,BSP开始点数,1,2,3。。。并一一记录在案。在启动OS前,通过ACPI table告诉OS有多少个内核。OS不应该自己统计内核数目,事实上固件可以通过瞒报内核的方式将部分内核挪作他用,但谁会这么做呢?&/p&&p&如何发起IPI在CPU package里有大量实例和库,大家可以参考。&/p&&h2&&b&其他&/b&&/h2&&p&一些容易混淆的名词这里要特别说明一下&/p&&p&&b&IRQ&/b& x:起源于PIC,指中断引脚,后在APIC时代沿用,泛指中断号。&/p&&p&&b&Vector&/b& x/INT x: X是中断向量,如前文所说 IRQ不等于INT和vector.&/p&&p&&b&PIRQ&/b&: PCI
IRQ。它是描述南桥内部PCI设备的IRQ配置关系的。我们下一篇文章介绍。&/p&&p&&b&GSI&/b&:Global System Interrupt,是ACPI spec规定的全局中断表。它为多IOAPIC情况下确定了系统唯一的一个中断号。例如IOAPIC1有24个IRQ,IOAPIC2也有24个IRQ,则IOAPIC2 的GSI是从24开始,GSI = 24 + IRQ(IOAPIC2)。&/p&&p&&b&SCI&/b&:System Control Interrupt,系统控制中断,是ACPI定义的,专用于ACPI电源管理的一个IRQ。它在Intel平台上常常与南桥的电源管理模块一起,当外部EC等发生Event后会引发SCI。Windows的SCI ISR程序就是著名的acpi.sys。acpi.sys在收到SCI后会检查GPE状态寄存器以确定是谁引发的event,然后按照ACPI spec要求调用相应Method。详情请参照ACPI spec。可以认为SCI是ACPI定义的所有电源管理事件的总入口,它对应的IRQ在一般情况下是不能修改的。SCI是如何报告和简单的GPE method我们在下一篇中会详细介绍。&/p&&h2&&b&结语&/b&&/h2&&p&说了这么多,如果我们从硬件和软件方面,梳理整个中断设置和处理的链条,会发现还有个环节没有解决。那就设备的IRQ是谁来决定的?是硬件hard wired?还是软件可以配置?OS是如何知道这些信息的呢?OS又是怎么知道IOAPIC的数目和位置的呢?这些都是UEFI固件需要解决的问题,我们在下一篇文章中会详细说明。在此之前,如以往一样,有几个思考问题可以让大家加深对中断和UEFI的理解:&/p&&p&1.
中断的引入,必然带来了代码重入的问题。我们知道,这可以通过设定优先级、信号量/临界区等等办法来解决。UEFI是通过什么方法呢?TPL和IRQL的相似和区别又是什么呢?&/p&&p&2.
UEFI内核还不支持多线程,我们如果需要增加多线程调度,仅仅依靠时钟中断,够不够用呢?&/p&&p&3.
OS利用缺页异常可以调度内存到硬盘上和实现Lazy loading等等实用的功能。UEFI的SMM内核也开启了缺页异常,但是却为了另外一个目的,你能看出是为了什么吗?&/p&&p&中断体系其他文章:&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&计算机中断体系一:历史和原理 - 知乎专栏&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&计算机中断体系三:中断路由 - 知乎专栏&/a&&/p&&p&欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号&UEFIBlog&,在那里有最新的文章。同时欢迎大家给本专栏和公众号投稿!&/p&&figure&&img src=&https://pic3.zhimg.com/v2-45479ebdd2351fcdcfb0771bd06fff3a_b.jpg& data-rawwidth=&344& data-rawheight=&344& class=&content_image& width=&344&&&figcaption&用微信扫描二维码加入UEFIBlog公众号&/figcaption&&/figure&
前文介绍了中断的硬件基础,今天我们深入了解一下中断的软件逻辑和不同操作系统的中断策略以及UEFI中的中断实现,最后我们澄清些常常混淆的概念。中断处理流程正如我们前文讲到的,中断处理在8086时代就已经引入PC。我们就从这个“远古”的鼻祖说起。1。中…
&figure&&img src=&https://pic3.zhimg.com/v2-7cd0e832b9a8ec_b.jpg& data-rawwidth=&652& data-rawheight=&492& class=&origin_image zh-lightbox-thumb& width=&652& data-original=&https://pic3.zhimg.com/v2-7cd0e832b9a8ec_r.jpg&&&/figure&消灭星星游戏的规则非常简单:&p&1、一次消除同色的方块越多,剩余方块越少,得分越高&br&2、相同颜色连在一起的方块,鼠标双击其中的一个方块就可以消除&br&&/p&&p&如下为14级同学大一时实现的游戏效果,也可以直接运行云盘Debug目录下的exe程序。&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-0da40bbfb64a8ed90aa30_b.jpg& data-rawwidth=&642& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&642& data-original=&https://pic3.zhimg.com/v2-0da40bbfb64a8ed90aa30_r.jpg&&&/figure&&br&&p&对应的分步骤代码可从百度云盘下载:&a href=&https://link.zhihu.com/?target=http%3A//pan.baidu.com/s/1i4MztvZ& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&pan.baidu.com/s/1i4Mztv&/span&&span class=&invisible&&Z&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&以下为对应各步骤的主要实现思路:&br&&/p&&br&&figure&&img src=&https://pic2.zhimg.com/v2-eb4e0b4dd891d4a0ac5e93_b.jpg& data-rawwidth=&932& data-rawheight=&693& class=&origin_image zh-lightbox-thumb& width=&932& data-original=&https://pic2.zhimg.com/v2-eb4e0b4dd891d4a0ac5e93_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-bcededafab03bb5_b.jpg& data-rawwidth=&956& data-rawheight=&497& class=&origin_image zh-lightbox-thumb& width=&956& data-original=&https://pic1.zhimg.com/v2-bcededafab03bb5_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-a071ef19aacd_b.jpg& data-rawwidth=&949& data-rawheight=&650& class=&origin_image zh-lightbox-thumb& width=&949& data-original=&https://pic4.zhimg.com/v2-a071ef19aacd_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-bcbfafee67c892a6e24ae_b.jpg& data-rawwidth=&912& data-rawheight=&292& class=&origin_image zh-lightbox-thumb& width=&912& data-original=&https://pic4.zhimg.com/v2-bcbfafee67c892a6e24ae_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-a5f601b3cbdb22aa7d38d3_b.jpg& data-rawwidth=&945& data-rawheight=&401& class=&origin_image zh-lightbox-thumb& width=&945& data-original=&https://pic2.zhimg.com/v2-a5f601b3cbdb22aa7d38d3_r.jpg&&&/figure&
消灭星星游戏的规则非常简单:1、一次消除同色的方块越多,剩余方块越少,得分越高 2、相同颜色连在一起的方块,鼠标双击其中的一个方块就可以消除 如下为14级同学大一时实现的游戏效果,也可以直接运行云盘Debug目录下的exe程序。 对应的分步骤代码可从百…
不懂题主说的是操作ubuntu桌面那种的还是做Linux服务器维护的,如果是后者,鸟哥那两本书是必看的,shell的书建议看一下这个《LinuxShell脚本攻略 第2版 &strong&[Linux Shell Scripting Cookbook, Second Edition]&/strong&》,《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》和《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》 两个作者都是51cto的知名博主,都有工作经验的;《&a href=&//link.zhihu.com/?target=http%3A//item.jd.com/.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UNIX/Linux 系统管理技术手册(第4版)&i class=&icon-external&&&/i&&/a&》这本讲的也很全面;《&a href=&//link.zhihu.com/?target=http%3A//item.jd.com/.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux命令行大全&i class=&icon-external&&&/i&&/a&》,这本也可以看看。计算机类的还是人们邮电和机械工业出的书好,像清华出的那些就算了。
不懂题主说的是操作ubuntu桌面那种的还是做Linux服务器维护的,如果是后者,鸟哥那两本书是必看的,shell的书建议看一下这个《LinuxShell脚本攻略 第2版 [Linux Shell Scripting Cookbook, Second Edition]》,《高性能Linux服务器构建实战:系统安全、故障…
&p&&a href=&//link.zhihu.com/?target=http%3A//www.amazon.cn/gp/product//ref%3Das_li_ss_tl%3Fie%3DUTF8%26camp%3D536%26creative%3D3132%26creativeASIN%3D%26linkCode%3Das2%26tag%3Dzhihu02-23& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux for Beginners: An Introduction to the Linux Operating System and Command Line&i class=&icon-external&&&/i&&/a&&br&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.amazon.cn/gp/product//ref%3Das_li_ss_tl%3Fie%3DUTF8%26camp%3D536%26creative%3D3132%26creativeASIN%3D%26linkCode%3Das2%26tag%3Dzhihu02-23& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux Bible&i class=&icon-external&&&/i&&/a&&br&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.amazon.cn/gp/product//ref%3Das_li_ss_tl%3Fie%3DUTF8%26camp%3D536%26creative%3D3132%26creativeASIN%3D%26linkCode%3Das2%26tag%3Dzhihu02-23& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Linux Command Line: A Complete Introduction&i class=&icon-external&&&/i&&/a&&/p&
我推荐的都是比较短的,每个花一个星期就能读个大概,基本概念都能记得住的,入门是没啥问题。好多人都推荐那种厚砖头,就算鸟哥也是厚砖头,看着看着就觉得绝望╮( ̄▽ ̄)╭&br&&br&前两天男票给我看了个 wiki,我大概翻了翻,感觉是个略缩版的鸟哥,短,由易到难,也能当作工具速查,使用方面入门是没问题了。&a class=& wrap external& href=&//link.zhihu.com/?target=http%3A//linuxtools-rst.readthedocs.org/zh_CN/latest/base/index.html& target=&_blank& rel=&nofollow noreferrer&&Linux基础 — Linux Tools Quick Tutorial &i class=&icon-external&&&/i&&/a&&br&&br&操作系统开发方面同事推荐了本《 Linux 内核设计与实现》,我司前员工 Robert Love 写的,最短篇幅讲了 Linux 内核开发的一些知识,因为短,所以读起来压力不大。&br&&br&Linux C 编程推荐 &a class=& wrap external& href=&//link.zhihu.com/?target=http%3A//songjinshan.com/akabook/zh/& target=&_blank& rel=&nofollow noreferrer&&中文版:Linux C/C++编程一站式学习&i class=&icon-external&&&/i&&/a& 虽然是培训机构的东西,但是讲得都很透彻。&br&&br&看完基本上入门差不多,有时间有兴趣可以多多读点别的教程和书,比如各个厚砖头~&br&&br&还有前两天看到有人研究 kernel booting 发了个参考教程,我也觉得不错。 &a href=&//link.zhihu.com/?target=https%3A//0xax.gitbooks.io/linux-insides/content/Booting/linux-bootstrap-1.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&From bootloader to kernel&i class=&icon-external&&&/i&&/a&
我推荐的都是比较短的,每个花一个星期就能读个大概,基本概念都能记得住的,入门是没啥问题。好多人都推荐那种厚砖头,就算鸟哥也是厚砖头,看着看着就觉得绝望╮( ̄▽ ̄)╭ 前两天男票给我看了个 wiki,我大概翻了翻,感觉是个略缩版的鸟哥,短,由易到难…
&a href=&//link.zhihu.com/?target=http%3A//superuser.com/questions/tagged/linux%3Fsort%3Dvotes%26pageSize%3D15& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Highest Voted 'linux' Questions&i class=&icon-external&&&/i&&/a&&br&还有,另外别忘了多数Linux问题都可以英文google到
还有,另外别忘了多数Linux问题都可以英文google到
&b&国内的专业Linux网站(GB)&/b&&br&1. &a href=&//link.zhihu.com/?target=http%3A//www.chinaunix.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unix技术网 = 全球最大的Linux/Unix应用与开发者社区 = IT人的网上家园&i class=&icon-external&&&/i&&/a&&br&&br&2. &a href=&//link.zhihu.com/?target=http%3A//linux.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux中国-我们的Linux中文社区&i class=&icon-external&&&/i&&/a&&br&&br&3. &a href=&//link.zhihu.com/?target=http%3A//www.shiyanlou.com& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&实验楼 - 第一家以实验为核心的IT在线教育平台&i class=&icon-external&&&/i&&/a&: 免费提供了Linux在线实验环境,不用在自己机子上装系统也可以学习Linux,超方便实用!。&br&&br&&b&国内的专业Linux网站(BIG5)&/b&&br&1. 香港Linux用户协会:&a href=&//link.zhihu.com/?target=http%3A//wiki.linux.org.hk/w/Mainpage& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&首頁 - FlossDoc&i class=&icon-external&&&/i&&/a&,了解香港Linux的好网站。&br&&br&2. Linux@Taiwan:&a href=&//link.zhihu.com/?target=http%3A//www.Linux.org.tw/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&Linux.org.tw/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,台湾的Linux爱好者组织,CLDP的家,列有翻译的Linux HOWTO 中文版。&br&&br&3. Chinese Linux Extensions Website:&a href=&//link.zhihu.com/?target=http%3A//cle.Linux.org.tw/CLE/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&cle.Linux.org.tw/CLE/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,中文Linux扩展(CLE),基于Red Hat和KDE的中文解决方案。&br&&br&&br&&b&国外著名Linux网站&/b&&br&1. LinuxOnline:&a href=&//link.zhihu.com/?target=http%3A//www.Linux.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&Linux.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,最权威的Linux网站,文章讨论无所不包,软件硬件应有尽有。&br&&br&2. &a href=&//link.zhihu.com/?target=http%3A//li.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux International&i class=&icon-external&&&/i&&/a&:
有大量的Linux资源列表。&br&&br&3. Linux: &a href=&//link.zhihu.com/?target=http%3A//www.Linux.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&Linux.com/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,学习Linux的最好网站,也是Linux使用经验的汇聚地。&br&&br&4. 《Linux focus》&a href=&//link.zhihu.com/?target=http%3A//www.Linuxfocus.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&Linuxfocus.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,免费电子杂志《Linux focus》,特色是每期集中讨论一个话题。&br&&br&5. 《Linux Journal》 :&a href=&//link.zhihu.com/?target=http%3A//www.Linuxjournal.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&Linuxjournal.com/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&),很棒的Linux专业杂志。&br&&br&6. &a href=&//link.zhihu.com/?target=http%3A//www.kde.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&KDE - Experience Freedom!&i class=&icon-external&&&/i&&/a&&br&&br&7. &a href=&//link.zhihu.com/?target=http%3A//www.apache.org& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Welcome to The Apache Software Foundation!&i class=&icon-external&&&/i&&/a& :全球占有率最高的Web服务器:Apache的网站,学习它的最好场所。&br&&br&8. &a href=&//link.zhihu.com/?target=http%3A//www.kernel.org& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Linux Kernel Archives&i class=&icon-external&&&/i&&/a&:Linux核心的网站,有着很齐全的Linux的核心的各种版本。&br&&br&&b&BBS资源&/b&&br&现在,几乎在所有的大中型BBS网站,尤其是各高校BBS,都开辟了Linux专栏或专区&br&&br&,以下并未将所有这些网站列出,只提供几个国内水平较高和上站人数较多的BBS网站。&br&&br&1.
水木清华BBS:&a href=&//link.zhihu.com/?target=http%3A//bbs.tsinghua.edu.cn& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&bbs.tsinghua.edu.cn&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&2.
中国科技大学BBS:&a href=&//link.zhihu.com/?target=http%3A//bbs.ustc.edu.cn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&瀚海星云bbs站&i class=&icon-external&&&/i&&/a&&br&&br&3.
&a href=&//link.zhihu.com/?target=http%3A//bbs.sjtu.edu.cn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&饮水思源&i class=&icon-external&&&/i&&/a&&br&&br&&b&国外Linux发行版本网站&/b&&br&1. CentOS:&a href=&//link.zhihu.com/?target=http%3A//www.centos.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CentOS Project&i class=&icon-external&&&/i&&/a&&br&&br&2. RedHat: &a href=&//link.zhihu.com/?target=http%3A//www.redhat.com& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Red Hat | The world's open source leader&i class=&icon-external&&&/i&&/a&,大名鼎鼎的”小红帽&的网站,内容很多,也是搜索Linux各类资源的上好网站。&br&&br&3. Ubuntu: &a href=&//link.zhihu.com/?target=http%3A//www.ubuntu.com& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The leading OS for PC, tablet, phone and cloud&i class=&icon-external&&&/i&&/a&&br&&br&4. Debian:&a href=&//link.zhihu.com/?target=http%3A//www.debian.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Debian -- The Universal Operating System&i class=&icon-external&&&/i&&/a&,Debian Linux 的官方网站。&br&&br&5. S.U.S.E:&a href=&//link.zhihu.com/?target=http%3A//www.suse.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux OS | SUSE Linux Enterprise&i class=&icon-external&&&/i&&/a&,S.U.S.E. Linux 的官方网站
国内的专业Linux网站(GB) 1.
3. : 免费提供了Linux在线实验环境,不用在自己机子上装系统也可以学习L…
已有帐号?
无法登录?
社交帐号登录
871 人关注
164 条内容
472 条内容
122 人关注
109 条内容
3072 人关注
588 条内容}

我要回帖

更多关于 4399小游戏消灭星星 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信