Linux操作系统和计算机理解

1、计算机硬件---组成房子的砖瓦

      计算机软件---对硬件的层层抽象,多层抽象之后接近用户使用目的

2、随着计算机的演进,软件能提供的公共功能被提取出来封装成库,库暴露出来的接口就是API(应用编程接口)

3、用户空间(用户态):不管有没有库,只要是用来开发应用程序的,不是作为操作系统一部分的,就是运行于用户空间的程序

     核心空间(内核态):需要在内核空间运行的程序(操作系统)

4、应用程序运行:

     1)需要向内核发起系统调用:内核执行特权指令、控制总线、操作硬件等,当应用运行期间需要做某种特权操作、程序自身不具备特权操作能力,就会运行到该操作的时候向内核发起申请进行系统调用,内核如果发现用户有权限进行申请操作,CPU转入到特权模式,内核运行相关指令并把结果返回给应用程序,应用程序继续执行

     2)应用程序不需要特权操作,直接在CPU完成相关操作

5、开机运行的进程---守护进程;开机不运行的进程---需要shell(人机交互接口)进行人机交互

6、计算机发展:

     第一代:真空管,穿孔卡片

    第二代:晶体管,批处理系统

     第三代:集成电路,多道程序设计

     第四代:PC,大规模集成电路

7、CPU上的内存管理单元---MMU,实现内存分页memory page

8、总线----连接不同设备(工作频率非常高、数据交换能力非常强)

9、CPU:

     取指令:取指单元(内存中取指令)

     解码:解码单元(指令转换成CPU能执行的指令)

     执行:执行单元

10、寄存器:保存关键变量和数据、指令计数器(把指针指到下一个内存地址),跟CPU工作在同一个时钟周期下

11、进程挂起时,保存现场到内存中,使用task struct保存进程状态

12、进程并行执行:一个进程运行到多个核心上,把进程成指令划分成多个不同的执行单元,把串行执行流做成并行执行流,并行执行流互不相干,每一个并行执行流就称为一个线程,多个线程调度到不同核心执行---并行编程,线程共享进程的资源,多个线程操作同一资源时就会发生资源争用,发生争用的资源叫做---临界区

13、CPU不同核心执行线程时会维护一个线程队列,执行完之后就从队列中把相关线程删除,不同核心根据队列中线程的数目每隔一段时间进行Rebalance负载均衡。

14、进程绑定:提高缓存命中率(线程切换核心的时候、前一个核心的寄存器缓存会不可用)

15、SMP:对称多处理器,一台机器多个CPU(机器需要有多个CPU插槽---CPU socket)

16、CPU跟内存通过总线通信(随着技术的发展内存的频率也提高了很多)

17、南桥北桥:主机使用一种总线连接不同设备,中间需要设备控制器,设备控制器把设备总线汇总起来接入CPU,其中高速的接口芯片叫做北桥,低速的接口芯片叫做南桥---都是IO桥(有些特殊的服务器会使用特殊总线使内存直接接入到CPU)

18、CPU的速度就目前而言一定比内存快,CPU中寄存器存储的使进程的关键状态,为了避免CPU和内存不协调,两者之间需要使用缓存。

19、程序的局部性原理:

     空间局部性:一个数据被访问到之后,与之相邻的数据可能会被访问

     时间局部性:一个被访问到的数据很快会再次被访问到

20、内存:用时间换空间的一种存储设备,缓存---用一些空间换回一些时间,缓存分为一级缓存、二级缓存、三级缓存。

21、程序缓存的2-8法则和局部性原理:机械硬盘的数据20%缓存在固态硬盘上,固态硬盘20%的数据缓存在内存中,内存20%的数据缓存到三级缓存中,三级缓存20%的数据缓存到二级缓存中,二级缓存20%的数据缓存到一级缓存中,一级缓存20%的数据缓存到寄存器中,寄存器跟CPU工作在同一个时钟周期,一级缓存和二级缓存为CPU核心专用,所有核心共享三级缓存,一级缓存的大小是决定CPU性能的关键因素,缓存造价昂贵。

22、不同核心访问内存需要知道哪些进程运行在哪个核心上,哪些空间可以使用------非一致性内存访问NUMA------非一致性内存访问,每一颗CPU都有自己的内存空间,减小了不同核心争用资源的可能性

23、CPU操作数据是在寄存器中,处理完的数据存储到内存,内存中的数据再由操作系统存储到硬盘空间中。硬盘也有缓存,内核控制数据线写到硬盘缓存后再写到硬盘中---通写,内核控制数据写到硬盘缓存,由硬盘自己控制缓存写到硬盘空间---回写。通写数据可靠性高,性能差;回写数据可靠性低,性能高。

24、I/O设备:

     1)设备控制器:集成电路板上的一块芯片或一组芯片,负责从操作系统中接受命令读取数据(如操作系统发出指令读取某个文件、读取请求被内核层层转化发给了设备驱动程序,驱动程序控制设备控制器从设备中读取---如硬盘设备控制器SATA---真正的硬盘操作是驱动程序完成的)

     2)设备本身

25、硬件操作是由驱动程序完成的,驱动程序是设备生产商设计并集成到内核中

26、设备控制器有一个或多个用于通信的寄存器,每个寄存器表现为一个io端口,所有的端口叫做主机的端口空间;所有的寄存器组合成设备的io地址空间,有2^16(65536)个端口,操作系统使用io端口跟硬件设备交互,由设备对应的驱动转换成相应的操作;IO控制器在开机的时候会跟主机进行申请注册,主机根据申请顺序分配io端口,CPU读io数据通过驱动发指令,由驱动转化成设备能理解的信号放到设备自身的寄存器中,有设备执行io操作

27、输入输出的三种方式:

    1)轮询

     2)中断:中断向量,中断号(可编程中断控制器----通过io设备注册的中断号识别中断设备,CPU根据注册的中断号激活内核,把当前执行的进程做中断切换,内核获取io设备请求并判断是否接收其请求)以网卡为例,当一个数据包到达网卡后,网卡触发中断,数据包先到网卡缓冲区,内核处理中断,发现是可以接收的请求,把数据从网卡缓冲区复制到内核缓冲区(内存中的一段空间,是一段读缓冲区),读进来之后发现是一段网络请求报文,通过拆数据包可以看到网络层和传输层,进而获取端口号,内核根据应用程序启动时注册的端口号把数据发送给用户空间相应的程序处理。但是,单个ip报文的最大值是10k左右,假设一个10M的数据就会拆分成很多包,就会有很多中断(CPU总线只有一条但是从功能上分为地址总线、控制总线、数据总线三种)

     3)DMA:直接内存中断:为了解决上述问题,IO设备一般都会自带DMA设备直接操作内存,当需要处理中断的上半部分时,CPU通知DMA设备接下来总线归你使用,并在内存中划分一部分空间,DMA就从设备缓冲区传输到内存中,当数据读完之后,再次发出中断告诉CPU处理完毕,目前大多数频繁数据传输的设备都有DMA,如网卡、硬盘等。

28、内核处理分为两步:

     1)中断上半部分(立即处理)

     2)中断下半部分(可能立即处理,可能不立即处理)

29、OS操作系统:

    CPU:被抽象成时间片---time slice,程序抽象成进程,通过分配时间片让程序运行

     内存:虚拟地址空间

     I/O: 抽象成文件

     进程:资源集(包括CPU时间,地址空间,IO),进程是资源分配的基本单位,是资源的集合(CPU时间片、独立内存空间---假设是32位操作系统,内核使用1G低地址内存空间,每个程序都认为自己可以使用3G高地址内存空间)

     task struct:作业地址结构,内核为每一个进程维护一个数据结构(内存空间),内核的内存地址空间中通过链表的形式保存进程的上下文,内存映射,一级CPU的寄存器状态字。

30、OS在RAM中:在低地址空间;OS在ROM中,在高地址空间

31、变量:命名的内存空间,名称对应的就是内存地址

32、32位寻址空间2^32=4G字节,对应的64位寻址空间2^64

33、内存使用虚拟地址空间,磁盘中的地址空间在内核中被抽象成文件,想使用地址空间就是对文件操作

34、程序都有局部性原理,于是内核把整个用户空间切分成页框---Page Frame(通常是4K),每一个页框作为一个单独的单元向外进行分配,每个页框都有自己的编号

35、进程地址分配:从低到高---代码段、数据段(静态变量)、离散随机的空间间隔、堆(如打开的文件流)、离散随机的空间间隔、映射共享库空间(内核映射)、离散随机的空间间隔、栈(变量)、离散随机的空间间隔---进程以为自己的内存空间是连续的,但真正的物理内存上的地址空间由内核来分配,是离散映射的

36、CPU在进程发出地址请求之后,找进行的task struct,装载内存映射,转换线性内存到物理内存,由page table完成。

37、页框:作为一个独立的单元向外分配

38:page table:一个线性地址分级映射到物理地址,每一个转换对应关系叫做页表项目,由CPU的MMU来做映射,装载一个进程不单单要装载状态字还要装载页表的映射关系。每访问一个线程地址都由MMU自动转换成物理地址。当程序告诉CPU一个地址之后,CPU把地址告诉MMU,MMU物理内存寻址,这就是页表映射。

39、TLB(转换后援缓存器):为了解决频繁寻址,在MMU之前加后援缓存器(缓存页表的查询结果),在程序发出一个地址之后,如果缓存有,直接返回,如果无,转到MMU

40、虚拟机寻址:目前CPU都引入了两级MMU,目前从虚拟机程序线性地址到主机地址,再由主机地址到物理地址转换都由CPU的两级MMU分别直接完成(早期的虚拟机线性地址到主机地址的映射是由虚拟机软件模拟转换,所以性能很差)

41、MMU不只是用来做地址映射,还做访问保护,如果一个进程访问不属于它的地址空间,MMU则直接拒绝其访问,这就是内存保护机制

42、优化:

     1)进程优化:进程和CPU绑定

     2)内存优化:增大操作系统内存页来减小页表,从而避免快表(TLB)缺失,基于NUMA进程和CPU绑定来提高内存的访问性能,内存在内核中分配的时候,由不同页,页的分配回收算法可以优化,内存数据同步到硬盘的算法可以优化。

     目前90%的优化问题都会转化为对内存的优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值