引言
如果您拥有一台计算机,那么您对操作系统一定不陌生。人们购买的任何台式或便携式PC通常都预先安装了Windows XP;Macintosh计算机预先安装的是OS X;许多企业的服务器使用Linux或UNIX操作系统。操作系统(OS)是装入计算机的第一个程序,如果没有操作系统,计算机将毫无用处。
最近,操作系统也开始出现在更小型的计算机中。如果您平时喜欢摆弄电子设备,会很高兴地发现,如今操作系统可以安装在我们日常使用的很多设备中,从手机到多种无线访问终端。这些小型设备中的计算机的功能非常强大,它们都可以运行操作系统和应用程序。现在的一部普通手机中所包含的计算机功能甚至比20年前台式计算机的功能还要强大。因此这种进步很有意义,也是自然发展不可避免的趋势。在任何一台装有操作系统的设备中,通常都提供了更改该设备工作方式的方法。这绝不是一个幸运的巧合,操作系统之所以采用可移植的代码,而不采用永久性的物理电路,原因之一就是通过代码对其进行更改或修改时可避免拆卸整台设备。
获得微软公司许可重新印制的包装盒 2003Microsoft Corporation。保留所有权利。 微软Windows XP操作系统 |
对于台式计算机用户来说,这意味着在进行更改时只需添加一个新的安全更新、系统补丁、新的应用程序,甚至是整个新的操作系统,而无须淘汰计算机去购买全新的一台。只有在了解操作系统的工作原理并知道如何利用时,您才可以在许多方面对计算机的一些工作方式进行更改。此外,手机中操作系统的工作原理与计算机的实际上没有什么区别。
操作系统用于组织和控制硬件、软件,从而使安装操作系统的设备以一种灵活但可预期的方式运行。在本文中,我们将讲述必须具备什么功能的软件才称为操作系统,并向您介绍台式计算机中操作系统的工作原理,以及举例说明如何控制身边的其他操作系统。
操作系统的本质
并不是所有的计算机都具有操作系统。例如,厨房中控制微波炉的计算机就不需要操作系统。微波炉有一组要执行的任务,用户可直接输入所期望执行的操作(数字按键和一些预设置的按钮),并且它还具有可以控制的简单且无需更改的硬件。对于此类计算机,操作系统反而会成为不必要的负担——它将大幅增加产品的开发和生产成本,而且增添不必要的复杂性。因此,微波炉中装入的计算机只需一直运行一个简单的固化程序即可。
对于其他设备,操作系统需要具有满足以下条件的功能:
- 实现多种用途
- 以更复杂的方式与用户进行交互
- 满足随时间而改变的需求
所有的台式计算机都具有操作系统。其中最普遍的是微软开发的Windows操作系统、苹果公司开发的Macintosh操作系统以及UNIX系列操作系统(由若干开发人员、公司及合作者共同开发)。此外,还有针对特殊应用领域的数以百计的其他操作系统,包括专门用于大型机、机器人技术、生产制造和实时控制系统等的操作系统。
操作系统的功能
简单来说,操作系统的功能有两个:
- 它管理系统的硬件和软件资源。在台式计算机中,这些资源包括处理器、存储器、磁盘空间等。(在手机中,这些资源则包括键盘、屏幕、通讯簿、电话拔号器、电池和网络连接。)
- 在无需了解硬件的所有详细信息情况下,为应用程序提供稳定、一致的方式来处理硬件。
第一个任务(即管理硬件和软件资源)非常重要,因为多个程序和输入方法会出于自己的目的竞相争夺CPU(中央处理单元)的资源,并且使用内存、存储器及输入/输出带宽。在此功能中,操作系统扮演着出色的指挥者角色,它既要确保每个应用程序都得到所需的资源,又要保证与所有其他应用程序的兼容,同时还要充分利用有限的系统容量,从而最大程度地满足所有用户和应用程序的需要。
如果有多个特定类型的计算机使用操作系统,或者要更换计算机硬件时,第二项任务(即提供兼容的应用程序接口)就变得格外重要。一致的应用程序接口(API)使软件开发人员在一台计算机上编写应用程序时,有信心保证此应用程序可以在另一台同一类型的计算机上运行,尽管两台计算机的内存容量或存储器数量各不相同。
即使某种特殊计算机是唯一的,操作系统也可以确保在硬件升级和更新时应用程序得以正常运行。这是因为,操作系统(而不是应用程序)负责管理硬件和分配其资源。开发人员面临的挑战之一是要保证他们的操作系统具有足够的灵活性,从而可以在成千上万的计算机设备供应商所提供的硬件上运行。因为当今的系统可以配置成千上万种不同种类的打印机、磁盘驱动器以及任何可能组合的特殊外设。
操作系统的种类
操作系统拥有广泛的系列,根据它们所控制的计算机类型和所支持应用程序的类型,大致可分为四类。这些广泛的分类包括:
- 实时操作系统(RTOS)——实时操作系统用于控制机械设备、科学仪器以及工业系统。由于RTOS在交付使用时采用的是“全封闭”形式,因此在通常情况下,该系统几乎没有什么用户界面功能,也没有最终用户实用程序。RTOS的一个重要作用是管理计算机资源,从而在每次执行某种特定的操作时,都严格使用相同的时间。在一台复杂的机器中,由于其具备可用系统资源而使机器的某一部分以更快的速度运行,这将与因系统繁忙而无法运行一样具有相同的灾难性。
- 单用户,单任务——顾名思义,该操作系统设计用于管理计算机,使单个用户每次只能高效地执行一个操作。用于掌上电脑的Palm OS是现代单用户、单任务操作系统的一个良好示例。
- 单用户,多任务——这就是目前多数用户在他们的台式计算机或笔记本电脑中使用的操作系统类型。微软公司的Windows操作系统和苹果公司的MacOS操作系统平台均为一个用户可以同时运行多个程序的操作系统的范例。例如,一个Windows用户一边在文字处理软件上撰写日记,一边从互联网下载文件,同时还在打印一封电子邮件消息的文本,这是完全可能的。
- 多用户——多用户操作系统允许多个不同用户同时使用计算机的资源。操作系统必须确保均衡地满足各个用户的要求,他们使用的各个程序都具有足够且独立的资源,从而使一个用户的问题不会影响到整个用户群。Unix、VMS和大型机操作系统(如 MVS)是多用户操作系统的范例。
Mac OS X Panther操作系统屏幕截图 |
区分多用户操作系统和支持网络的单用户操作系统很重要。Windows 2000和Novell Netware均可以支持成千上万的网络用户,但操作系统本身并不是真正的多用户操作系统。系统管理员是Windows 2000或Netware的唯一“用户”。从操作系统的整体计划来看,网络支持和所有远程用户均可登录到网络,这些都属于由管理员用户运行的程序。
在了解了各种不同类型的操作系统后,现在我们将进一步介绍操作系统所提供的基本功能。
操作系统的任务
打开计算机的电源时,通常运行的第一个程序是保存在计算机只读存储器(ROM)中的一组指令。此代码检验系统硬件,从而确保一切运行正常。上电自检(POST)将检测CPU、内存和基本输入输出系统(BIOS) 是否存在错误并将结果存储在某个特殊的内存位置。一旦成功完成POST,载入ROM的软件(有时则称为BIOS或固件)将开始激活计算机的磁盘驱动器。在大多数现代计算机中,当计算机激活硬盘驱动器时,该计算机将运行第一个操作系统:引导装入程序。
这种引导装入程序是具有单一功能的小程序:它将操作系统载入到内存并使之开始运行。引导装入程序通过最基本的形式设置与之交互的小驱动程序,并控制计算机的各个硬件子系统。它设置存放操作系统、用户信息及应用程序的内存分区,也建立装有大量信号、标记和信号量(用于在子系统和计算机应用程序内部及之间通信)的数据结构,然后再将其对计算机的控制转移给操作系统。
在一般情况下,操作系统的任务基本分为六种类型:
- 处理器管理
- 内存管理
- 设备管理
- 存储器管理
- 应用程序接口
- 用户界面
尽管有人争论操作系统应执行比这六项任务更多的功能,并且确实也有一些操作系统供应商将更多的实用程序及辅助功能集成到他们的操作系统中,但这六项任务几乎涵盖了所有操作系统的核心内容。下面我们将介绍操作系统执行每项功能所使用的工具。
管理处理器
管理处理器的核心内容可以归结为两个相关问题:
- 确保每个进程及应用程序得到足够的处理器时间来实现其正常功能。
- 实际工作中尽可能使用更多的处理器周期。
在由处理器完成工作的计划中,操作系统处理的软件基本单元为进程或线程,具体取决于操作系统。
通常,人们倾向于将进程看作是一个应用程序,但这并没有全面给出进程与操作系统和硬件之间的关联。实际上,我们所了解的应用程序(文字处理器、电子数据表或游戏)的确是一个进程,但该应用程序可能会导致几个其他进程开始运行,比如,与其他设备或计算机进行通信的任务。然而,此外还有大量我们察觉不到的运行的进程,因为它们不会提供直观的证据。例如,Windows XP和UNIX可以同时运行十几个后台进程以处理网络、内存管理、磁盘管理和病毒检查等。
因此,进程是执行一些操作的软件,并且可由用户、其他应用程序或操作系统进行控制。
操作系统控制进程(而不是应用程序),并由CPU安排执行。在单任务系统中,计划表简明易懂,操作系统允许应用程序开始运行,只有在要处理中断和用户输入时,才会暂停足够长的时间。
中断是由硬件或软件发送给CPU的特殊信号。就好比在某一次现场会议上,计算机的某部分突然举手示意以引起CPU的关注。有时操作系统通过安排进程的优先级,从而使中断被屏蔽——换言之,操作系统将忽略来自于某些源的中断,从而能够尽快完成特定的任务。然而有一些中断(比如出现错误或内存故障)非常重要,因此不能忽略。无论当前正在执行什么其他任务,都必须立即处理这些非屏蔽中断(NMI)。
尽管在单任务系统中,中断为进程的执行增加了一些复杂性,但操作系统的任务在多任务系统中更为复杂。那么,操作系统必须安排应用程序的执行,从而使人们相信这几件事看上去是同时发生的。因为CPU在某一时间只能做一件事情,这就变得很复杂。为了制造同时做多件事的假象,操作系统必须每秒在不同的进程之间转换数千次。下面我们来介绍它的过程:
- 一个进程占用一定量的RAM,同时还会使用CPU和操作系统内存空间中的寄存器、堆栈和队列。
- 当两个进程具有多个任务时,操作系统将为一个程序分配一定数量的CPU执行周期。
- 在运行该数量的周期后,操作系统将备份该进程所使用的所有寄存器、堆栈和队列,并标明进程执行中止的位置。
- 然后加载第二个进程所使用的所有寄存器、堆栈和队列,并允许它运行一定数量的CPU周期。
- 当这些步骤完成后,操作系统将备份第二个程序所使用的所有寄存器、堆栈和队列,然后加载第一个程序。
在将切换数据存储在称为进程控制块的数据包中后,所有信息都将用于跟踪一个进程。进程控制块通常包括:
- 可识别进程的识别号码
- 指向程序中的位置及上次处理处的数据的指针
- 寄存器内容
- 各种标记和切换的状态
- 指向进程所需内存的上界和下界
- 由进程打开的一系列文件
- 进程的优先级
- 进程所需的所有I/O设备的状态
每个进程都具有与之相关联的状态,很多进程在获得某类输入之前不会消耗CPU时间。例如,一个进程可能需要用户按键才会启用,而等待按键时,该进程不消耗任何CPU时间。处于等待状态时,该进程被“中止”;当开始按键时,OS会改变其状态。比如,当该进程的状态发生改变(例如,从等待到活动状态,或从中止状态到运行状态)时,必须像使用任何其他程序中的数据一样使用进程控制块中的信息,从而直接执行操作系统的任务切换部分。
执行此进程切换无需进行直接的用户干涉,每个进程可以获得足够的CPU周期,从而在适量的时间内完成任务。但是,如果用户试图同时运行太多的进程,那么就会出现问题。操作系统本身需要一些CPU周期来执行应用程序进程中所有寄存器、堆栈和队列的保存及切换。如果启动太多的进程,并且操作系统又没有经过精心设计,系统便可能会占用大多数可用的CPU周期在进程之间进行切换,而不是运行进程。当出现此种情况(称为系统颠簸)时,通常需要某种直接的用户干涉以停止进程,从而使系统恢复秩序。
操作系统设计人员降低发生系统颠簸几率的一个方法是,减少新进程执行多项任务的需求。一些操作系统允许“小进程”(称为线程),可以处理普通进程的所有CPU密集型任务,但通常不会处理各种类型的I/O,并且也不会创建要求常规进程的大量进程控制块的结构。一个进程可能启用很多线程或其他进程,但线程却不能启动进程。
到目前为止,我们所讨论的所有安排都是关于单个CPU的。在一个具有两个或更多CPU的系统中,操作系统必须在各个CPU之间分配工作量,试图平衡不同CPU可用周期所需进程的需求。不对称的操作系统针对自身需求使用一个CPU,并在剩余的CPU中分配应用程序的进程。对称的操作系统则将自身分配到各个CPU中,即使在只有操作系统本身运行的情况下,也要平衡需求和CPU可用性。
虽然操作系统是需要执行的唯一软件,但CPU却不是需要安排的唯一资源。内存管理是确保所有进程平稳运行的下一个关键步骤。
内存存储器管理
当操作系统管理计算机的内存时,有两个主要任务需要完成:
- 每个进程必须具有足够的内存以执行操作,并且既不可以在其他进程的内存空间中运行,也不可以让其他进程在这一内存空间运行。
- 必须合理使用系统中不同类型的内存,以使每个进程可以高效运行。
第一项任务需要操作系统为不同类型的软件和单个应用程序设置内存边界。
我们以一个虚拟的小型系统为例来进行分析,该系统有1兆字节(1,000千字节)的RAM。在启动进程过程中,我们将虚拟计算机的操作系统设计为位于所有可用内存的顶部,然后充分进行“备份”以满足操作系统本身的需求。例如,操作系统运行需要300千字节。那么现在,操作系统进入到RAM池的底部,并使用控制计算机硬件子系统的各驱动程序软件开始创建。在我们虚拟的计算机中,驱动程序占用了200千字节。因此,在将操作系统完全加载后,还有剩余的500千字节可用于应用程序进程。
当应用程序开始载入内存时,它们以操作系统确定的块大小进行载入。如果块大小为2千字节,那么每个已载入的进程将会获得多个大小为2千字节的内存块。应用程序将会以这些固定的块大小载入,并开始和结束于由4或8个字节的字创建的边界。这些块和边界有助于确保各应用程序不会因为一两个字节的计算误差而载入彼此内存空间的顶部。在确保满足这一条件后,更重要的问题是,当500千字节的应用程序空间被填满之后应当采取什么措施。
在多数计算机中,可以在原有内存空间的基础上添加内存。例如,您可以将RAM从1兆字节扩展到2兆字节。这是可行的,但通常比较昂贵。此外,这忽视了计算的一个基本现状,即由应用程序存储在内存中的多数信息在给定时间内并不会被使用。处理器一次只能访问处于一个位置的内存,因此大多数的RAM不会在任意时段使用。因为磁盘空间相对于RAM更为充足,所以将RAM中的信息移动到硬盘可以在不花费任何代价的情况下大大扩展RAM空间,这项技术被称为虚拟内存管理。
磁盘存储是必须由操作系统管理的唯一一种内存类型,并且也是最慢的一种类型。按速度排序,计算机系统中的内存类型可分为:
- 高速缓存——它是通过快速连接,从而使CPU可用的、相对少量的内存。缓存控制器预先判断CPU下一步将需要哪些数据,并将这些数据从主内存调入高速缓存,从而提高系统性能。
- 主内存——这是购买计算机时所能看到的以兆字节为单位的RAM。
- 辅助存储器——这就是大多数情况下使所有应用程序和数据可用的旋转电磁存储,它的作用是充当操作系统控制下的虚拟RAM。
操作系统必须使用不同类型内存的可用性来平衡各进程的需求,按照进行的指示计划将数据以块(称为页面)的形式在可用内存之间移动。
驱动程序
操作系统和所有不位于计算机主板上的硬件是通过一种称为驱动程序的特殊程序进行通信的。驱动程序的主要作用是充当硬件子系统的电子信号、操作系统及应用程序的高级编程语言之间的转换器。驱动程序将操作系统已定义的数据视为文件,然后将它们转换成存储设备上特定位置处的比特流,或打印机中的一系列激光脉冲。
因为在由驱动程序控制的硬件之间存在着很大的差异,因此驱动程序运行的方式也存在差异,但大多数驱动程序都会根据设备的要求运行,并且运行方式也与任何其他进程类似。操作系统频繁地将拥有较高优先级的块分配给驱动程序,以使硬件资源尽可能快地得到释放并准备进一步使用。
驱动程序与操作系统之所以分开,其中一个原因是为了将新增功能添加到驱动程序(从而添加到硬件子系统),而无需对操作系统本身进行修改、重新编译以及重新分配。通过开发新的硬件设备驱动程序,通常由子系统的制造商执行开发或付费,而不是操作系统的发行商,整个系统的输入/输出功能将得到大幅度提高。
管理输入和输出很大程度上是管理队列和缓冲器,从某一设备接收字节流的特殊存储设备(可能是键盘或串行端口)将存储这些字节,再将其以CPU可以处理的足够慢的速度释放到CPU。当大量进程同时运行并占用处理器时间时,这个功能尤其的重要。该操作系统将对缓冲器发出指令,使之可以继续接收该设备的输入,但当使用该输入的进程处于中止状态时,操作系统会停止向CPU发送数据。那么,当需要输入的进程再一次激活时,操作系统将会命令缓冲器发送数据。该进程允许使用键盘或调制解调器处理外部用户或高速运行的计算机的需求,尽管有时CPU不能使用那些来源的输入。
管理计算机系统的所有资源是操作系统的主要功能,对于实时操作系统,可能需要所有的功能。但是对于其他操作系统,为应用程序提供相对简单、一致的方式以及人们使用功能强大的硬件是它们存在的一个重要原因。
应用程序接口
应用程序接口
正如驱动程序为应用程序提供了一种无需了解硬件运行的每个细节即可使用硬件子系统的方法,应用程序接口(API)使每位应用程序员可以使用计算机和操作系统的功能,而无需直接跟踪CPU运行的所有细节。让我们看一个有关创建保存数据的硬盘文件的例子,以了解它的重要性。
一位正在编写一个从科学仪器记录数据应用程序的程序员,可能希望科学家能够指定所创建文件的名称。操作系统可能提供一种称为MakeFile的API功能来创建文件。当编写该程序时,该程序员可能会插入一行,如:
MakeFile [1, %Name, 2]
在此示例中,该指令告诉操作系统创建一个允许随机访问其数据的文件(以1表示,对于序列文件中的其他选项可以用0表示),将由用户(%Name)键入名称,并且其大小取决于存储在该文件中的数据多少(以2表示,其他选项中的固定大小可能用0表示,并且用1表示文件在添加数据时变大,但在数据删除时却不会减小)。现在,让我们了解一下操作系统如何将指令转换成操作。
操作系统向磁盘驱动器发送请求,以确定第一个可用空白存储空间的位置。
使用该信息,操作系统在文件系统中创建一个项以显示文件的起始与结束位置、文件名、文件类型、文件是否归档、哪些用户具有查看或修改文件的权限,以及文件的创建日期和时间。
操作系统在标识文件的起始位置编写信息,设置可能的访问类型,并包含将文件捆绑到应用程序的其他信息。在所有信息中,发送到磁盘驱动器的请求和文件起始与结束点的地址在格式方面很大程度上取决于制造商和磁盘驱动器的型号。
由于程序员编写了程序来使用磁盘存储的API,因此程序员不需要跟踪指令代码、数据类型以及每个可能的硬盘和磁带驱动器的响应代码。与各硬件子系统的驱动程序相关联的操作系统,可以处理硬件更改的细节——程序员必须简单编写API的代码并相信操作系统可以完成剩下的任务。
近年来,API已成为计算机行业竞争最为激烈的领域之一。很多公司认识到,使用API的程序员会最终将其转换成一种控制并从该行业的某一特定领域获利的能力。这就是为什么目前有这么多的公司愿意为公众免费提供阅读器和查看器之类的应用程序的原因之一。他们了解消费者将会要求这类程序可以利用免费的阅读器,而应用程序公司就准备要求支付使用费才可以使用提供消费者要求的各种功能的软件。
用户界面
正如API为应用程序提供了可以一直使用计算机系统资源的方法,用户界面(UI)则提供了一个用户与计算机进行交互的结构。在过去十年中,几乎所有用户界面的发展都出现在图形用户界面(GUI)领域。苹果公司的Macintosh和微软公司的Windows都引起了众多关注并占领了多数市场份额。广受欢迎的开源软件技术Linux操作系统也支持图形用户界面功能。
Screen shot copyright 2003 Red Hat, Inc. 保留所有权利。 获得Red Hat, Inc.许可,重新印刷 Red Hat Linux操作系统的屏幕截图 |
还有用于其他操作系统的其他用户界面,有些是图形界面,有些则不是。
例如,Unix具有称为外壳的用户界面,相对于标准操作系统基于文本的界面,该用户界面具有更大的灵活性以及更强大的功能。诸如Korn外壳和C外壳的程序是添加了重要实用程序的基于文本的界面,但它们的主要目的是使用户可以更轻松地利用操作系统的功能。也有一些图形用户界面,如X-Windows和Gnome,可以使Unix和Linux操作起来更像是Windows和Macintosh计算机。
在所有这些示例中,用户界面作为一个层面是位于操作系统本身之上的程序或程序集,记住这一点很重要。对于具备不同机制的Windows和Macintosh操作系统而言,原理也是一样的。核心操作系统工作功能,即计算机系统的管理,在于操作系统的内核。尽管显示管理器与位于下方的内核紧密相连,但它是独立的。操作系统内核和用户界面、实用程序以及其他软件之间的联系决定了当今操作系统的很多差异,并且将会在未来进一步影响它们。
操作系统的新增功能
日益增长的网络的重要性
对于桌面系统而言,访问局域网或互联网已经成为一种必备的功能,从而在很多方面只要谈及操作系统,就不能不说它与其他计算机和服务器的连接。操作系统开发人员已经使互联网成为能够提供重要操作系统更新和错误修复的标准方法。尽管可以通过CD接受这些更新,但使用这种方式的人越来越少。事实上,一些完整的操作系统本身只能通过互联网发布来获得。
其次,一种称为NetBooting的进程可以很轻松地将普通消费者的台式计算机中正在运行的操作系统(内核、用户界面及所有其他内容)从它所控制的计算机上移除。而这在先前只有那些多用户平台(如UNIX)上经验丰富的超级用户以及使用特殊应用程序套件才可以实现。NetBooting允许一台计算机的操作系统通过网络中所连接任意位置的一台远程计算机服务于整个网络连接。一台NetBoot服务器可以同时为几十台客户端计算机和每台客户端计算机的用户提供操作系统,使用户得到类似于使用他们熟知的桌面操作系统(如Windows或MacOS)的体验。
开源软件技术
有关软件分发的特殊理念是操作系统未来发展所需关注的一个问题,即开发一种同时适用于公司和消费者的操作系统。
大家普遍认为Linux作为一种根据开源软件技术的原则创建和分发的操作系统,已经对操作系统产生了较大的影响。大多数操作系统、驱动程序和实用程序由分发其软件可执行版本(这些版本不可以研究或更改)的商业组织编写。开源软件技术需要分发可以研究、更改以及在其基础上创建的原始源材料,并且其结果也可再次自由分发。在台式计算机领域内,这将导致无数有用的和无成本的应用程序(如图像操作程序GIMP和广受欢迎的网络服务器Apache)的开发及分发。在消费者设备领域,Linux的使用已经在更大程度上为个人用户控制其设备的工作方式铺平了道路。
Linux徽标
了解操作系统
许多消费电子设备(如手机和路由器)都有意避免用户访问其中的操作系统,很大程度上是为了确保操作系统不会在无意中被破坏或删除。在许多情况下,他们保留了一种“开发人员模式”或“程序员模式”,这允许具有相应知识的用户可以进行更改。通常这些系统的编程方式是使之可以在仅有的范围内进行更改。但有些设备保留访问模式以及进行增强功能的更改方式都是开放的,特别是在使用Linux时较为常见。下面介绍几个例子:
- TiVo DVR运行在Linux的修改版本上。所有的修改都是公开的,您可以在此处下载它们,以及用于操作代码的一些特殊工具。很多大胆的TiVo用户也是那样做的,他们为自己的系统上添加了很多功能,包括增大存储容量,进入到UNIX外壳将模式从NTSC更改为PAL。
Amazon.com供图
Philips HDR312 TiVo30小时数码录像机和Linksys EZXS55W EtherFast 10/100 5端口工作组交换机 - 很多家庭路由器也使用Linux,包括Linksys公司的路由器。本文由G4TechTV提供,其中将讨论如何改编您的Linksys路由器以及控制其中的Linux。
[责任编辑:小敏]
评论
查看更多