博客阅读笔记记录

http://blog.csdn.net/column/details/15153.html

http://blog.csdn.net/column/details/linuxkernel.html


char *dest

注意,在提领运算符的周围加上合适的空格尤为重要。正确的风格是:

      char *strcpy(char *dest, const char *src)


      在提领运算符的一边加上空格是不良的风格:
      char * strcpy(char * dest, const char * src)   /*BAD STYLE*/


      把提领运算符放在紧挨类型的地方也是借用 C++ 风格的一种不良作风:


      char* strcpy(char* dest, const char* src)      /*BAD STYLE*/


Q:如何查看分区和目录及使用情况?

–      fdisk查看硬盘分区表

–      df:查看分区使用情况

–      du: 查看文件占用空间情况

Q: 为什么要分区,如何分区?

–      可以把不同资料,分别放入不同分区中管理,降低风险。

–      大硬盘搜索范围大,效率低

–      磁盘配合只能对分区做设定

–      /home /var /usr/local经常是单独分区,因为经常会操作,容易产生碎片。


每次安装系统的时候我们都会进行分区,Linux下磁盘分区和目录的关系如下:

①  任何一个分区都必须挂载到某个目录上。

②  目录是逻辑上的区分。分区是物理上的区分。

③  磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。

④  根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。


Linux正统的文件系统(如ext2、3等)将硬盘分区时会划分出目录块、inode Table区块和data block数据区域。一个文件由一个目录项、inode和数据区域块组成。Inode包含文件的属性(如读写属性、owner等,以及指向数据块的指针),数据区域块则是文件内容。当查看某个文件时,会先从inode table中查出文件属性及数据存放点,再从数据块中读取数据。


当我们读取一个文件时,实际上是在目录中找到了这个文件的inode编号,然后根据inode的指针,把数据块组合起来,放入内存供进一步的处理。当我们写入一个文件时,是分配一个空白inode给该文件,将其inode编号记入该文件所属的目录,然后选取空白的数据块,让inode的指针指像这些数据块,并放入内存中的数据。


首先回答最常见的问题,“什么是文件系统”。文件系统是对一个存储设备上的数据和元数据进行组织的机制。


什么是块设备?

块设备就是以块(比如磁盘扇区)为单位收发数据的设备,它们支持缓冲和随机访问(不必顺序读取块,而是可以在任何时候访问任何块)等特性。块设备包括硬盘、CD-ROM 和 RAM 盘。与块设备相对的是字符设备,字符设备没有可以进行物理寻址的媒体。字符设备包括串行端口和磁带设备,只能逐字符地读取这些设备中的数据。


阻塞是主动放弃CPU,但不会放弃内存。一般是被动的。

挂起:一般是主动的,由系统或程序发出,甚至于辅存中去。(不释放CPU,可能释放内存,放在外存)

阻塞:一般是被动的,在抢占资源中得不到资源,被动的挂起在内存,等待某种资源或信号量(即有了资源)将他唤醒。(释放CPU,不释放内存)


由软件引发中断控制器工作,所产生的中断叫做软中断。

由硬件引发………………………………………………………硬中断。


(5)硬中断和软中断的区别

软中断是执行中断指令产生的,而硬中断是由外设引发的。

硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。

硬中断是可屏蔽的,软中断不可屏蔽。

硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。

软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。


1. 上半部和下半部的区别

上半部指的是中断处理程序,下半部则指的是一些虽然与中断有相关性但是可以延后执行的任务。举个例子:在网络传输中,网卡接收到数据包这个事件不一定需要马上被处理,适合用下半部去实现;但是用户敲击键盘这样的事件就必须马上被响应,应该用中断实现。
两者的主要区别在于:中断不能被相同类型的中断打断,而下半部依然可以被中断打断;中断对于时间非常敏感,而下半部基本上都是一些可以延迟的工作。由于二者的这种区别,所以对于一个工作是放在上半部还是放在下半部去执行,可以参考下面四条:
a)如果一个任务对时间非常敏感,将其放在中断处理程序中执行。
b)如果一个任务和硬件相关,将其放在中断处理程序中执行。
c)如果一个任务要保证不被其他中断(特别是相同的中断)打断,将其放在中断处理程序中执行。
d)其他所有任务,考虑放在下半部去执行。

tasklet

由于软中断必须使用可重入函数,这就导致设计上的复杂度变高。作为设备驱动程序的开发人员来说,添加了负担。而假设某种应用并不须要在多个CPU上并行运行,那么软中断事实上是没有必要的。

因此诞生了弥补以上两个要求的tasklet。它具有以下特性: 
a)一种特定类型的tasklet仅仅能运行在一个CPU上,不能并行,仅仅能串行运行。 

b)多个不同类型的tasklet能够并行在多个CPU上。

c)软中断是静态分配的。在内核编译好之后,就不能改变。但tasklet就灵活很多,能够在运行时改变(比方加入模块时)。


tasklet是在两种软中断类型的基础上实现的。因此假设不须要软中断的并行特性,tasklet就是最好的选择。也就是说tasklet是软中断的一种特殊使用方法。即延迟情况下的串行运行。tasklet不可重入。


并发,是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序。

并行,是每个cpu运行一个程序。

打个比方。并发,就像一个人(cpu)喂2个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭。并行,就是2个人喂2个孩子,两个孩子也同时在吃饭。


一个epoll场景:一个酒吧服务员(一个线程),前面趴了一群醉汉,突然一个吼一声“倒酒”(事件),你小跑过去给他倒一杯,然后随他去吧,突然又一个要倒酒,你又过去倒上,就这样一个服务员服务好多人,有时没人喝酒,服务员处于空闲状态,可以干点别的玩玩手机。至于epoll与select,poll的区别在于后两者的场景中醉汉不说话,你要挨个问要不要酒,没时间玩手机了。io多路复用大概就是指这几个醉汉共用一个服务员。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值