13、简述raid0 raid1 raid5 三种工作模式的工作原理及特点。
RAID 0:连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据
传输率,但它没有数据冗余,因此并不能算是真正的 RAID 结构。RAID 0 只是单纯地提高
性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合。
RAID 1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此 RAID 1 可以提高读取性能。RAID 1 是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。简单来说就是:镜象结构,类似于备份模式,一个数据被复制到两块硬盘上。
RAID5:分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上,任何一个
硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。支持一块盘掉线后仍然正常
运行。
一、打印出file1 文件第 1 到第 3 行
sed n ’1,3p’ file1
head 3 file1
二、如何将本地 80 端口的请求转发到 8080 端口,当前主机 IP 为 192.168.2.1
iptables -t nat -A PREROUTING -d 192.168.10.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.10:8080
三、crontab
在 11 月份内,每天的早上 6 点到 12 点中,每隔 2 小时执行一次/usr/bin/httpd.sh 怎
么
实现
任务调度文件:/etc/crontab
执行任务:#crontab–e
终止任务:#crontab–r
列出调度任务:#crontab–r
0 612/2 * 11 * /usr/bin/httpd.sh
四、通过 apache 访问日志 access.log 统计 IP 和每个地址访问的次数,按访问量列出前 10 名。
日志格式样例如下
192.168.1.247 – [02/Jul/2010:23:44:59 +0800] “GET / HTTP/1.1″ 200 19
答案:
cataccess_log | awk ‘{print $1}’ | uniqc|sortrn |head 10
//这个别的方法也能统计,但有些命令是必要的 awk , sort,uniq ,主要看是否这些命令都使用了。
五、如何用 mysql 命令进行备份和恢复?以test 库为例,创建一个备份,并再用此备份进行恢复。
mysqldump-u root -p test >test.sql
mysql-u root -p test //主要考对方 msqldump>test.sql 和 mysql 六、写一个脚本查找最后创建时间是3天前,后缀是*.log的文件并删除。 find / -name "*.log" -ctime +3 -exec rm -f {} \; 七、写一个脚本将某目录下大于100k的文件移动至/tmp下。 fori in `find /test -type f -size +100k`;do cd /test && mv $i /tmp;done 八、写一个脚本将数据库备份并打包至远程服务器192.168.1.1 /backup目录下。 mount 192.168.1.1:/backup /mnt cd /mnt /usr/local/mysql/bin/mysqldump -hlocalhost -uroot test >test.sql tar czf test.sql.tar.gz test.sql(解压–xzvf) rm -f test.sql 九、写一个防火墙配置脚本,只允许远程主机访问本机的80端口。 iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -X iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT iptables -P INPUT DROP 十、当用户在浏览器当中输入一个网 g 站,说说计算机对 dns 解释经过那些流程?注:本机跟本地 dns 还没有缓存。 答: a.用户输入网址到浏览器 b.浏览器发出 DNS 请求信息 c.计算机首先查询本机 HOST 文件,看是否存在,存在直接返回结果,不存在,继续下一 步 d.计算机按照本地 DNS 的顺序,向合法 dns 服务器查询 IP 结果, e.合法 dns 返回 dns 结果给本地 dns,本地 dns 并缓存本结果,直到TTL 过期,才再次查询此结果 f.返回 IP 结果给浏览器 g.浏览器根据 IP 信息,获取页面 十一、一个 EXT3 的文件分区,当使用touch test.file 命令创建一个新文件时报错,报错的信息是提示磁盘已满,但是采用 df h 命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况,说说你的理由。 答:两种情况,一种是磁盘配额问题,另外一种就是 EXT3 文件系统的设计不适合很多小文件跟大文件的一种文件格式,出现很多小文件时,容易导致 inode(储存文件元信息的区域) 耗尽了。 十二、我们都知道 FTP 协议有两种工作模式,说说它们的大概的一个工作流程? FTP 两种工作模式:主动模式(Active FTP )和被动模式(Passive FTP) 在主动模式下,FTP 客户端随机开启一个大于 1024 的端口 N 向服务器的 21 号端口发起连接,然后开放 N+1 号端口进行监听,并向服务器发出 PORT N+1 命令。服务器接收到命令后,会用其本地的 FTP 数据端口(通常是20)来连接客户端指定的端口 N+1,进行数据传输。 在被动模式下,FTP 客户端随机开启一个大于 1024 的端口 N 向服务器的 21 号端口发起连接,同时会开启 N+1 号端口。然后向服务器发送 PASV 命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于 1024 的端口 P 进行监听,然后用 PORT P 命令通知客户端,自己的数据端口是 P。客户端收到命令后,会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。 总的来说,主动模式的 FTP 是指服务器主动连接客户端的数据端口,被动模式的 FTP 是指服务器被动地等待客户端连接自己的数据端口。被动模式的 FTP 通常用在处于防火墙之后的 FTP 客户访问外界 FTp 服务器的情况,因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防火墙之后的主机发起的连接请求通过。 因此,在这种情况下不能使用主动模式的 FTP 传输,而被动模式的 FTP 可以良好的工作。 十三、我们都知道,dns 既采用了 tcp 协议,又采用了 udp 协议,什么时候采用 tcp 协议?什么时候采用 udp 协议?为什么要这么设计? 答:这个题需要理解的东西比较的多,分一下几个方面 a,从数据包大小上分:UDP 的最大包长度是 65507 个字节,响应 dns 查询的时候数据包长度超过 512 个字节,而返回的只要前 512 个字节,这时名字解释器通常使用TCP 从发原来的请求。 b,从协议本身来分:大部分的情况下使用 UDP 协议,大家都知道 UDP 协议是一种不可靠的协议,dns 不像其它的使用 UDP 的 Internet 应用 (如:TFTP,BOOTP 和 SNMP 等),大部分集中在局域网,dns 查询和响应需要经过广域网,分组丢失和往返时间的不确定性在广域网比局域网上更大,这就要求 dns 客户端需要好的重传和超时算法,这时候使用TCP 十四、 TIME_WAIT状态的概念及意义 客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口状态为TIME_WAIT。 是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢? 有没有什么情况使主动关闭的socket直接进入CLOSED状态呢? 主动关闭的一方在发送最后一个ack后就会进入TIME_WAIT 状态停留2MSL(max segment lifetime)时间,这个是TCP/IP必不可少的,也就是“解决”不了的。 也就是TCP/IP设计者本来是这么设计的 主要有两个原因 1。防止上一次连接中的包,迷路后重新出现,影响新连接 (经过2MSL,上一次连接中所有的重复包都会消失) 2。可靠的关闭TCP连接 在主动关闭方发送的最后一个ack(fin),有可能丢失,这时被动方会重新发fin, 如果这时主动方处于CLOSED 状态,就会响应rst而不是ack。所以主动方要处于TIME_WAIT 状态,而不能是CLOSED 。 TIME_WAIT 并不会占用很大资源的,除非受到攻击。 还有,如果一方send 或recv超时,就会直接进入CLOSED 状态 十五、滑动窗口协议与停止等待协议的区别。 滑动窗口协议:滑动窗口协议,是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。可以实现流量的控制,让发送方不要发送的太快以便接收方来得及接收。 停止等待协议:就是发送方每发送完一次分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。 十六、TCP的流量控制和拥塞控制实现原理(会画拥塞控制的典型图)。 拥塞控制是防止过多的数据注入网络,这样可以使网络中的路由器或链路不致于过载,拥塞控制要做的一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程。几种拥塞控制的方法:慢开始、拥塞避免、快重传、快恢复。 流量控制是指点对点的通信量的控制,是个端到端的问题(接收端控制发送端)。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。 一:操作系统 1.进程的有哪几种状态,状态转换图,及导致转换的事件。 状态:绪(Ready)状态进程已获得除处理机外的所需资源,等待分配处理机资源,只要分配到CPU就可执行。在某一时刻,可能有若干个进程处于该状态。2)运行状态占用处理机资源运行,处于此状态的进程的数目小于等于CPU的数目。3)阻塞状态由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。 转换解释:从状态转换图中,存在四种状态转换。当进程调度程序从就绪队列中选取一个进程投入运行时引起转换1;正在执行的进程如因时间片用完而被暂停执行就会引起转换2;正在执行的进程因等待的事件尚未发生而无法执行(如进程请求完成I/O)则会引去转换3;当进程等待的事件发生时(如I/O完成)则会引起转换4。 事件:就绪队列非空,则一个进程的转换3会立即引去另一个进程的转换1。这是因为一个进程发生转换3意味着正在执行的进程由执行状态变为阻塞状态,这时处理机空闲,进程调度程序必然会从就绪队列中选取一个进程并将它投入运行,因此只要就绪队列非空,一个进程的转换3能立即引起一个进程的转换1。 2.进程与线程的区别。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行 3.进程通信的几种方式。 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 有名管道(named pipe) :有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 信号量( semophore ) :信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。 消息队列( message queue ) :消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 信号( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。 套接字( socket ) :套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于 不同及其间的进程通信。 4.线程同步几种方式。(一定要会写生产者、消费者问题,完全消化理解) 临界区(CCriticalSection):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 事件(CEvent):为协调共同对一个共享资源的单独访问而设计的。 互斥量(CMutex):为控制一个具有有限数量用户资源而设计。 信号量(CSemaphore):用来通知线程有一些事件已发生,从而启动后继任务的开始。 5.线程的实现方式. (也就是用户线程与内核线程的区别) 根据操作系统内核是否对线程可感知,可以把线程分为内核线程和用户线程。 内核线程建立和销毁都是由操作系统负责、通过系统调用完成的,操作系统在调度时,参考各进程内的线程运行情况做出调度决定,如果一个进程中没有就绪态的线程,那么这个进程也不会被调度占用CPU。 和内核线程相对应的是用户线程,用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,用户进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。用户线程多见于一些历史悠久的操作系统,例如Unix操作系统,不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少为了在操作系统中加入线程支持,采用了在用户空间增加运行库来实现线程,这些运行库被称为“线程包”,用户线程是不能被操作系统所感知的。引入用户线程,具体而言,有以下四个方面的优势: (1)可以在不支持线程的操作系统中实现。 (2)创建和销毁线程、线程切换代价等线程管理的代价比内核线程少得多。 (3)允许每个进程定制自己的调度算法,线程管理比较灵活。 (4)线程能够利用的表空间和堆栈空间比内核级线程多。 用户线程的缺点主要有以下两点: (1)同一进程中只能同时有一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起。 (2)页面失效也会产生类似的问题。 内核线程的优缺点刚好跟用户线程相反。实际上,操作系统可以使用混合的方式来实现线程。 6.用户态和核心态的区别、 7.用户栈和内核栈的区别。 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。 用户态切换到内核态的3种方式:系统调用、异常、外围设备中断。 8.内存池、进程池、线程池。(c++程序员必须掌握) 自定义内存池的思想通过这个"池"字表露无疑,应用程序可以通过系统的内存分配调用预先一次性申请适当大小的内存作为一个内存池,之后应用程序自己对内存的分配和释放则可以通过这个内存池来完成。只有当内存池大小需要动态扩展时,才需要再调用系统的内存分配函数,其他时间对内存的一切操作都在应用程序的掌控之中。 应用程序自定义的内存池根据不同的适用场景又有不同的类型。 从线程安全的角度来分,内存池可以分为单线程内存池和多线程内存池。单线程内存池整个生命周期只被一个线程使用,因而不需要考虑互斥访问的问题;多线程内存池有可能被多个线程共享,因此则需要在每次分配和释放内存时加锁。相对而言,单线程内存池性能更高,而多线程内存池适用范围更广。 从内存池可分配内存单元大小来分,可以分为固定内存池和可变内存池。所谓固定内存池是指应用程序每次从内存池中分配出来的内存单元大小事先已经确定,是固定不变的;而可变内存池则每次分配的内存单元大小可以按需变化,应用范围更广,而性能比固定内存池要低。 9. 死锁的概念,导致死锁的原因. 死锁 原因:系统资源不足、进程运行推进的顺序不合适、资源分配不当等。 10. 导致死锁的四个必要条件。 (1)互斥条件:一个资源每次只能被一个进程使用。 (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 11. 处理死锁的四个方式。 1)忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,(鸵鸟策略) 2)检测死锁并且恢复。(检测与解除策略) 3)仔细地对资源进行动态分配,以避免死锁。(避免策略) 4)通过破除死锁四个必要条件之一,来防止死锁产生。(预防策略) 12. 预防死锁的方法、避免死锁的方法。 通过破除死锁四个必要条件之一,来预防死锁产生,有两种方法,一种是当其申请的资源得不到满足时,也必须放弃其原先占有的资源;另一种方法是只适用于申请资源的进程优先级比占有该资源的进程优先级高时,如果一个进程申请的资源被其它进程占用,而申请进程的优先级较高,那么它可以强迫占有资源的进程放弃。 仔细地对资源进行动态分配,以避免死锁。 13. 进程调度算法。(周转时间= 程序结束时间-- 开始服务时间、带权周转时间= 周转时间/ 要求服务时间)??? 14. Windows内存管理的方式(块式、页式、段式、段页式). 内存管理是操作系统中的重要部分,两三句话恐怕谁也说不清楚吧~~我先说个大概,希望能够抛砖引玉吧当程序运行时需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运行,由于现在的操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚拟内存的概念。把哪些不常用的程序片断就放入虚拟内存,当需要用到它的时候在load入主存(物理内存)中。这个就是内存管理所要做的事。内存管理还有另外一件事需要做:计算程序片段在主存中的物理位置,以便CPU调度。内存管理有块式管理,页式管理,段式和段页式管理。现在常用段页式管理。 块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程序片断load入主存,就算所需的程序片度只有几个字节也只能把这一块分配给 它。这样会造成很大的浪费,平均浪费了50%的内存空间,但是易于管理。 页式管理:把主存分为一页一页的,每一页的空间要比一块一块的空间小很多,显然这种方法的空间利用率要比块式管理高很多。 段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高很多,但是也有另外一个缺点。一个程序片断可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上(计算机最耗时间的大家都知道是I/O吧)。 段页式管理:结合了段式管理和页式管理的优点。把主存分为若干页,每一页又分为若干段。 15. 内存连续分配方式采用的几种算法及各自优劣。 1) 单一连续分配是一种最简单的存储管理方式,其优点是软件处理简单,最大缺点是存储器不能充分利用。多用于单用户微机操作系统中。 2) 动态分区分配是多道程序环境下各种存储管理方式中最简单的一种。它将内存划分成若干个分区,在每个分区中按照连续分配方式分配给一个作业。分区形式: a) 固定分区分配:指内存在处理作业前已被划分成若干个大小不等的分区,存储管理程序根据每个作业步的最大存储量分配一个足够大的分区给它。当找不到一个足够大的分区时,则通知作业调度挑选另一作业,这种方式分配和回收内存简单,但内存利用不充分,会产生“碎片”空间。b) 可变分区分配:指内存事先并未被分区,只有当作业进入内存时,才根据作业的大小建立分区。其特点是分区的个数和大小都是可变的,但需要建立分配区表和空白区表,且表的长度是不固定的。 3) 可重定位分区分配为使各分区中的用户程序能移到内存的一端,使碎片集中于另一端成为一个大分区,在程序执行过程中,需对作业移动过程中的与地址有关项进行调整。这种分配方法的优点是清除碎片,更大程度地利用内存空间,但必须硬件的支持,且要花费时间。 16. 动态链接及静态链接. 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的EXE 文件中了。但是若使用DLL,该DLL 不必被包含在最终EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与EXE 独立的DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。静态链接库与静态链接库调用规则总体比较如下。 19. 分段分页方式的比较各自优缺点。 a) 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要(也是对用户透明的)。段是信息的逻辑单位,它含有一组其意义相对完整的信息(比如数据段、代码段和堆栈段等)。分段的目的是为了能更好的满足用户的需要(用户也是可以使用的)。 21. 虚拟内存的定义及实现方式。 虚拟内存,它的作用与物理内存基本相似,但它是作为物理内存的“后备力量”而存在的,也就是说,只有在物理内存已经不够使用的时候,它才会发挥作用。 改变页面文件位置的方法是:用鼠标右键点击“我的电脑”,选择“属性→高级→性能设置→高级→更改虚拟内存”,在驱动器栏里选择想要改变到的位置 22. 操作系统的四个特性。 并发性(concurrency):指在计算机系统中存在着许多并发执行的活动。对计算机系统而言,并发是指宏观上看系统内有多道程序同时运行,微观上看是串行运行。因为在大多数计算机系统中一般只有一个CPU,在任意时刻只能有一道程序占用CPU。 共享性(sharing):系统中各个并发活动要共享计算机系统中的各种软、硬件资源,因此操作系统必须解决在多道程序间合理地分配和使用资源问题。 虚拟性(virtual):虚拟是操作系统中的重要特征,所谓虚拟是指把物理上的一台设备变成逻辑上的多台设备。例如,在操作系统中采用了spooling技术,可以利用快速、大容量可共享的磁盘作为中介,模拟多个非共享的低速的输入输出设备,这样的设备称为虚拟设备。异步性:在多道程序环境下允许多个进程并发执行,但只有进程在获得所需的资源后方能执行。在单处理机环境下,由于系统中只有一台处理机,因而每次只允许一个进程执行,其余进程只能等待。 23. DMA。 DMA方式,Direct Memory Access,也称为成组数据传送方式,有时也称为直接内存操24. Spooling。 脱机输入和脱机输出 在多道环境下,可以用OS的一道管理程序实现从I/O设备输入数据并存放到磁盘上,模拟脱机输入;用OS的另一道管理程序将磁盘上的数据输出到I/O设备上,模拟脱机输出;这种假脱机I/O操作称为Spooling技术。 Spooling是一种虚拟设备技术、一种资源转换技术。 25. 外存分配的几种方式,及各种优劣。 连续分配:为每一个文件分配一组相邻接的盘块;物理上形成了顺序文件结构;外存上会出现“碎片”,用“紧凑”的方法解决。优缺点:顺序(批量)访问容易、速度快;要求有连续的存储空间(有时需要作紧凑处理)、必须事先知道文件的长度。 链接分配:离散分配方式。优缺点:消除了“碎片”,有利于文件的增/删/改。隐式链接 在文件的每个目录项中,都含有指向链接文件第一盘块和最后一个盘块的指针,只适合于顺序访;显式链接,把用于链接文件各物理块的指针,显式地存放在内存的一张“链接表”中。索引分配:单级索引分配每个文件一个索引块(表);多级索引分配当文件较大,需要很多个索引块时,可以为各索引块建立一个索引表(块);混合索引分配方式。