(零)操作系统基础

目录

进程管理  

(1)应用程序如何运行与OS上的

(2)什么是进程

(3)进程控制

1)为什么要进行进程控制

2)控制做些啥事情

3)多进程并发运行

4)进程控制信息(PCB)

5)进程的运行状态

6)有关进程调度

8)进程通信 

9)进程间的关系

10)轻量级的进程 — 线程

内存管理

1)虚拟内存

1)虚拟内存的基本原理

2)虚拟内存机制的具体实现 

3)动态库的实现原理

4)共享内存

2)虚拟内存总结

 设备管理

(1)回顾计算机结构 

(2)常见的外部设备

(3)设备驱动程序

1)为什么叫要驱动程序

2)驱动程序到底是如何驱动外部设备

(4)驱动程序的种类

文件管理

(1)文件在磁盘上存储形态

(2)文件系统

1)作用:文件管理软件,计算机文件的管理者

2)文件大致分类

3)文件系统的管理结构:树形管理结构

4)文件系统与OS,与磁盘关系

5)以ext文件系统的管理格式为例

3)访问文件的过程

4)文件系统 与 磁盘驱动

5)文件系统简单总结


 

进程管理  

(1)应用程序如何运行与OS上的

 ·Os代码和应用程序代码都在内存中

          ·运行应用程序的代码时,PC取应用程序的指令,CPU运行应用程序代码

         ·应用程序调用OS提供的函数接口,让OS帮忙提供支持时,这是PC取OS得指令并运行,并去控制外设(硬件)工作,这样就是取得OS支持,总之OS充当了应用程序控制硬件设备的中间人。

 

(2)什么是进程

进程是由程序变换而来,介绍进程时,需要先从程序说起。

1)当程序没有运行时
                    
      当程序没有被运行时,该程序(可执行文件)只是存放在硬盘上的静态数据,与你写的word文件中的数据没有本质区别

                        
                        
2)进程就是运行中的程序
                            
      当程序运行起来后,进程是所有与“程序运行”有关的代码和数据的集合体,简单的理解就是“进程”就是行进中的程序。
                        
                       

                        
3)进程也有生有死
                    
            (a)开始运行为生,运行结束即为死。
            (b)程序好比人,进程好比人生,人活着时的一切就是人生,程序活着时所涉及的一切就是进程。

                        
      

4)进程应包含三部分内容
                    
             (a)应用程序本身的代码和数据,这一部分称为应用代码部分,习惯称为应用空间

             (b)应用程序调用OS函数时,所涉及的OS中的代码和数据,这一部分称为内核代码部分,习惯称为内核空间

             (c)OS记录的进程在运行时的各种管理信息 专门进行进程管理的叫PCB进程控制块

   

(3)进程控制

1)为什么要进行进程控制

       在有OS的计算机上,应用程序必须在OS的支持下才能运行,换句话说,必须在OS的控制之下才能运行。

 

2)控制做些啥事情

      (a)分配内存空间,然后将程序调入内存并启动运行,运行起来后就变成了一个进程。

      (b)OS调度器对其进行调度

      (c)OS进行进程控制时,会负责记录进程各个方面的管理信息,这些控制(管理)信息都记录在了PCB中。

      (d)意外事件处理

      (e)当进程运行结束之后,回收内存空间、记录有各方面进程信息的PCB,

 

3)多进程并发运行

       在计算机上运行的绝不是只有一个进程,而是很多进程同时并发运行,进程在并发运行时
                    1)所有进程都是交替运行的,每个进程只运行一个ms级的时间片。                 
                    2)调度器会根据调度优先级算法,决定下一个时间片运行哪一个进程
                    3)从宏观上看,所有进程是同时并发运行的,但在微观上,在每个时刻,CPU只运行一个进程。

 

4)进程控制信息(PCB)

      我们说进程是在OS控制下运行的,OS会使用PCB管理各种进程信息,以Linux系统为例,PCB就是一个C结构体,该结构体名叫 task_struct,该结构体非常大,成员项达300个左右,用于记录该进程被OS控制运行时的各种管理信息。

     1)Linux系统的tasck_struct结构体 

           

     2)task_struct中的各种进程管理信息

            (a)进程信息

                    · 进程ID:用于唯一标识进程的编号,好比人的身份证号

                    · 程序名称:就是可执行文件的名字

                    · 可执行文件的格式:

                    · 进程时间:进程什么时候开始运行的

           (b)进程调度信息

                  · 进程运行状态:就绪态,执行态,等待态等

                  · 优先级:进程被调度的优先级,优先级高的会被优先被调度

                  · 调度标志:标记该进程是否被调度

                  · 时间片:运行时间片大小

            (c)文件信息:记录正在被进程操作文件的各种信息

            (d)内存信息:进程运行时所需内存的管理信息

            (e)休眠时间:比如当进程调用sleep函数,进程就会进入休眠。

 

 

5)进程的运行状态

       1)进程运行状态有哪些

                    (a)就绪态:表示进程准备就绪,随时等待被调度运行
                    (b)执行态:被调度运行,运行时占有CPU,运行的时间片到后让出CPU
                    (c)阻塞态:因为进程运行需要的某些条件的不满足,进程阻塞处于休眠状态
                    (d)终止态:进程结束,也就是程序运行结束,回收进程占用的内存资源

             

       2)进程状态间的切换

6)有关进程调度

          1)进程调度由调度器实现
          2)所有进程运行时,都包含就绪态、执行态、阻塞态、终止态这些状态,都会在这些状态之间来回切换           
          3)只有当进程进入执行态时,进程才会获得CPU的占有权 
          4)进程运行的时间片到后就会调度其它进程运行,每个时间片平均在10ms~20ms左右。
          

8)进程通信 

   本机进程间通信

                - 本机进程间通信的第三方 OS, 

                                            

 夸机进程间通信

                 其实就是网络通信,实现两台计算机上的程序之间的通信。

9)进程间的关系

   1)父子关系

   2)进程组关系

   3)会话期

10)轻量级的进程 — 线程

   1)进程存在的问题:进程切换很耗费时间

   2)进程问题的解决:线程

   3)线程由谁提供

             线程有两种提供方式,第一种则由操作系统提供,第二种以线程库方式提供,独立于OS之外。

             a)Linux:两种方式都有,不过常见的都是以独立于OS之外的线程库来提供。

             b)Win32:由OS提供

 

   4)与进程一样,线程也会参与调度

                   

   5)线程能够替代进程吗

            a)不能   因为线程是基于进程而存在,没有进程也无法无法实现

 

   6)进程与线程关系

            线程基于进程资源工作

                        资源(cpu和内存)以进程为单位进程分配的,因此进程被称为资源分配的最小单位

            线程的切换

                        进程内的线程切换时,不涉及进程间的切换   

            进程与线程各自的作用    

                        - 程序运行起来后就变成了进程,OS以进程为单位分配cpu、内存等计算机资源。
                        - 线程实现进程内部的多线任务

 

   7)进程和线程关系类比

 

 

 


内存管理

1)虚拟内存

1)虚拟内存的基本原理

a)原理图

(c)为什么称为虚拟内存

         CPU被欺骗了,它认为使用这个虚拟地址访问了某个内存,但是这个虚拟地址只是一个编号,这个虚拟地址对应的只是 一个虚拟的内存,实际上程序被分成两部分放在了内存上和外存上。

(d)虚拟内存机制为什么节省了内存    

          因为只加载了你要运行的那部分,其他的都在外存上,外存帮忙存了其他代码,相当于使用外存扩展了内存空间。

(e)虚拟内存机制为什么能够防止修改别人的程序空间

         自己的虚拟地址只映射了自己的物理内存空间和外存空爱,就算是程序员把地址写错了,但是错的也只是虚拟地址,由于  虚拟地址只映射了自己的空间,顶多也就把自己的空间给改了,不可能把别人的空间给改了。

2)虚拟内存机制的具体实现 

(a)将内存和程序分页

              

 

(b)加载程序,建立映射页表

               

                所有运行的进程都有一张自己页表  OS的虚拟内存机制就是使用每个进程的页表来管理这些虚拟页的。

  •                 1 加载肯定是有OS负责加载的
  •                 2 OS加载程序时候 需要一个辅助进程(该进程父进程)
  •                 3 程序被加载后成为进程 OS就会为该进程 开辟页表 (从父进程的页表复制过来 修改后得倒一张新页表)

 

(c)CPU通过“虚拟地址”取指并执行进程

 

虚拟地址/页大小(4K ) = 所在页号

 

(d)缺页异常处理

缺页中断: CPU取址运行 (内存没有在外存上    把所缺页导入内存 :(1 找空页导入   2替换掉以前的页))

                   CPU重新取址运行

 

3)动态库的实现原理

1)静态库和动态库

          静态库是在编译程序时就决定好了的,库代码已经被复制到了程序中,

          但是动态库不一样,程序使用这个动态库时,并没有将动态库代码复制到程序中,只是在程序中留下了一片空的虚拟地址作为接口,这些虚拟地址并不对应真实的指令。当我们的程序被加载到内存中运行时,才会动态的去加载动态库,因为动态库时共享的,因此动态库也被称为共享库。

 

2)动态库的实现

          动态库也叫共享库,核心是共享,因为动态库的实现需要虚拟内存机制的支持,

          如果是裸机的话,是没有OS,没有OS就没有虚拟内存机制,在裸机上只能使用静态库

 

3)程序中的动态库接口

        程序中使用了动态库的话,编译程序时,会预留一片虚拟地址。
        当程序运行起来后,这片虚拟地址会被映射到物理内存上的动态库,建立虚拟地址和动态库物理地址的对应关系。  
          

4)共享内存

不同进程共享了同一片空间后,一个往里方数据,另一个从里面取数据,就实现了通信。

与共享动态库的区别仅仅是,共享动态库时,共享空间里面放的是动态库的指令,供不同进程共享执行。
而共享内存仅仅只是一片空的共享空间,只是是用来通信用的。

2)虚拟内存总结

如下这张图是如何得到的

多进程是如何共享一个OS的:

应用空间对应的虚拟地址:用于访问应用代码。
内核空间对应的虚拟地址:用于映射到OS上,当应用代码调用OS的系统函数时,就会使用内核空间虚拟地址访问OS
使用虚拟地址,不管是访问应用代码,还是访问OS,虚拟地址都需要被转成物理地址,到实际的物理内存中去访问

 

CPU使用虚拟的地址运行每一个进程,CPU被虚拟地址欺骗后,CPU人为每一个进程都有一个自己的内存,这个欺骗CPU假内存,就称为虚拟内存。

CPU认为整个程序(进程)运行在独立的虚拟内存上,因此虚拟内存空间,也被称为进程空间。

 

虚拟内存就是通过虚拟内存机制,在物理内存和硬盘上,营造出来的一种假象


 设备管理

(1)回顾计算机结构 

(2)常见的外部设备

只要挂接在外设IO接口上的都是外部设备

按照用途分的话,大致分为三大类。
     (a)数据的传输:比如网卡,负责数据的发送和接收,即是输入也是输出设备
     (b)数据的存储:比如像磁盘,SSD(固态硬盘),既能读数据也能里写数据,所以即是输入也是输出设备。
     (c)数据的翻译:比如输入设备MIC,将输入的声音翻译为电信号的二进制数据。

(3)设备驱动程序

1)为什么叫要驱动程序

外部设备绝对不是连上就能用的,必须要有专门的程序来驱动才能工作,能够驱动外部设备工作的程序就是驱动程序。

                                                        

 

2)驱动程序到底是如何驱动外部设备

为了能够驱动外部设备工作,驱动程序关键要要两件事情

                    第一件:配置外设的工作模式
                    第二件:通过外设输入输出数据

(a)第一件:配置外部设备的工作模式

为什么要配置

         因为大多数外部设备都有很多种工作模式,驱动程序需要通过相应的配置,选择让设备工作在那种工作模式下

         如果不做配置的话,外部设备不知道该工作在什么模式下,是混乱的。

 

驱动程序是如何配置外部设备的呢

         通过相应的配置开关进行配置,这个配置开关就是“设备的配置寄存器”。

 

设备的配置寄存器

         就是外设工作模式的配置开关,是外设专用寄存器,与CPU内部的寄存器、cache、内存(DDR)一样,

         只是这些寄存器被做在了外部设备的内部,是专属于外设的专用小容量内存

         驱动程序向设备的配置寄存器中写入相应的配置数据,就可以配置好外部设备的工作模式。

 

·为什么向配置寄存器写入配置数据,就能配置好外设的工作模式

               

计算机中数据已电信号存在,向设备配置寄存器写入配置数据,其实就是将电信号导入配置寄存器,配置寄存器中
就把这个电信号锁存起来,这个电信号承载的是一个二进制数,所以就将电信号的二进制数据写入了配置寄存器中。

(b)第二件:输入/输出数据

配置好工作模式后,驱动程序就可以驱动设备工作了,此时需要用外设的“数据寄存器”。

          为什么需要数据寄存器呢?
          因为输入输出数据时,数据需要暂时存放在数据寄存器中,存数据时,存储的其实就是电信号。

·输入设备

输入设备有两种情况,
              第一种:直接得到就是二进制数据,比如像网卡和存储器,能够直接输入数据    
              第二种:需要经过传感器的翻译,比如像麦克风、摄像头,需要转为二进制电信号形式的数据。

         CPU执行输入设备驱动程序时,从输入设备的数据寄存器中取出数据,并将数据保存起来,专门进行数据处理的程序就可以处理这些输入的数据了。

          

本质就是数据的搬移(在指令的控制下 把电信号从一个地方捣鼓到另一个地方)

从设备数据寄存器搬移到---->驱动程序缓存里面搬移---->OS内核缓存---->C库缓存----->应用缓存

·输出设备

输入设备有两种情况(同上)

CPU执行输出设备的驱动程序时,会将电信号形式的数据写到设备的数据寄存器中,输出设备的

              

(4)驱动程序的种类

分为两种,第一种是裸机驱动程序,第二种是基于OS的驱动程序。

(a)裸机驱动程序的特点

裸机程序大致分为两部分,第一部分为业务逻辑代码,第二部分为驱动代码

            - 业务逻辑代码:专门负责数据的处理,比如计算1+2结果

            - 驱动代码:专门负责驱动外设,实现数据的输入输出,比如控制键盘输入1和2,控制显示屏显示3

                        

            

(b)基于OS的驱动程序 

                                


文件管理

(1)文件在磁盘上存储形态

文件存储在磁盘上时,分别要存储两部分的内容,第一部分是文件属性信息,第二部分是文件中存放的数据,属性信息和数据是分开存放的.

我们看见的图形化的文件,只是图形化给人看的一个文件符号而已,存储在磁盘上的文件信息才是真实的文件存在形态。

 

1)第一部分,文件属性信息 

表现文件的独特性质,是区别文件用的身份信息,文件的属性信息有文件名、文件类型、文件输在位置等信息,任何计算机上的文件的属性,80%都是相同

文件属性都包含,文件名称、文件类型、文件大小、文件位置、创建/修改时间、文件读写权限、打开方式等。

 

2)第二部分,文件数据:就是存放在文件中的数据。

 

3)文件属性与文件数据 

(a)并不是所有的文件都有数据

                       第一个:所有的文件一定都有属性信息  

                       第二个:但是不是所有的文件都有数据

(b)文件属性与文件数据如何发生关系

          文件属性中保存了文件数据在磁盘上存储地址,操作文件时,首先找到文件属性,然后再通过地址找到数据空间,调用磁盘驱动就可以操作文件数据所在磁盘空间,对文件数据进行相应的读写操作。  

                                 

(c)只有文件属性才能代表文件的存在性

        

(2)文件系统

1)作用:文件管理软件,计算机文件的管理者

                    书架:文件系统
                    书:文件
                    书中的内容:数据

数据是以文件为单元存储在磁盘上的,磁盘上会存储非常多的文件,因此需要文件系统这个软件来管理这些磁盘文件,文件系统被图形化呈现后,我们看见的就是各种的文件图标。
                    
那么文件系统管理文件时,文件系统是通过管理文件的属性信息来管理文件的,就好比公安局使用每个人的档案(人属性)来管 理人一样。

2)文件大致分类

(a)目录文件

              文件夹,用于归类和组织其它文件,是文件系统管理文件时很重要的组织节点。    
              目录文件在磁盘上存储时,会存储自己属性和数据两部分内容
              目录的数据空间只用与存放被管理文件的简略信息(文件的名字等)目录使用这些简略信息来组织管理文件

     文件的属性和数据并不放在目录文件空间里面,而是存放在文件自己的属性和数据空间。

 

(b)非目录文件

    ·有数据:由于存储和管理数据用的,有数据的文件又分成了两种

                    - 字符编码文件    - 非字符编码文件

    ·没有数据:这类文件很特殊,只有属性没有数据,属于特殊用途的文

3)文件系统的管理结构:树形管理结构

(a)组织结构都是以树形结构管理的

(b)文件系统的树形结构

                                 

4)文件系统与OS,与磁盘关系

(a)文件系统属于OS的一部分

 文件系统分为两部分,第一部分是“虚拟文件系统”,第二部分是“具体的文件系统”

· 虚拟文件系统:也叫VFS,OS内核与各种“具体文件系统”对接的统一接口。

· 具体的文件系统:文件分为了很多种

                                

 “虚拟文件系统”与“具体文件系统”的关系 

         

· 文件系统与“文件系统的管理格式”

        不同的文件系统会用不同的管理格式去管理我们的磁盘空间,从而实现对磁盘上所放文件的管理

        不同的文件系统的管理格式是不一样的。

        OS使用不同文件系统去管理磁盘、SSD、U盘、移动硬盘,我们需要设置不同管理格式。

 

- 如何设置磁盘、SSD、U盘、移动硬盘的管理格式呢?

         比如我们格式化磁盘、SSD、U盘、移动硬盘时,选择文件类型时,就是在选择该种文件系统对应的管理格式。

- 我们在格式化时做了什么事?

          

                                

一般,OS中会包含很多种文件系统

5)以ext文件系统的管理格式为例

1)文件系统管理格式概述

(a)ext文件系统为了很好的管理磁盘上存放的文件,ext对应的管理格式,将磁盘大致分为了四大存储区域

       

2)各大区域介绍

(a)自举区

     ·存储内容:存放“自举程序”

           

(b)超级区

           存储内容:存放对于磁盘(属性和数据存储区)的管理信息,其中有两个很重要的表(链表)

                    

(c)文件属性存储区

· 存储内容

           - 该区域专门用于存放所有文件的属性信息。

           - 该存储区域被分成了一个个的inode节点

             

             - 如何通过i节点编号访问i节点空间

               

                            

·存储文件属性信息的作用

                    (1)代表了文件的存在
                    (2)用于管理文件文件系统这个管理软件,让它去管理我们的文件系统。

(d)文件数据存储区

-存储内容

           - 存储文件数据,文件属性和数据分开存放的 

- 访问文件数据的过程

         

                            

      文件的数据并不是完全一整块存储在“文件数据存储区的”,而是分一块一块存储的,每一块之间不一定是连续的,各块之间通过相互保存对方地址连接起来。

     磁盘是以块作为空间分配和管理的最小单元,一块大约4KB左右,当向文件中输入数据,当前块满了后,“超级区”会给文件再分配一块空间,数据一点点的写入这个空间,当再次写满这个空间后,再分配一个块。

·普通文件和目录文件的数据内容

- 普通文件
                 对于普通文件来说,在数据空间放的就是文件中的数据。 

- 目录文件

                

 

3)访问文件的过程

                                     

(a)第一步:搜索,找到xxx.txt文件

              

               

               - /位置是固定的,先找到/的i节点空间

               - 通过/的i节点空间,找到/数据空间

               - 在/目录的数据空间,搜索/下的目录项,看看有没有叫xxx.txt的文件

                         + 如果有:xxx.txt名字 —> xxx.txt目录项—>i节点编号—>i节点空间

                         + 如果没有:OS返回一个错误信息给程序,提示操作的文件不存在。

 

(b)第二步:打开文件

(c)第三步:调用磁盘驱动程序,读写文件的数据

4)文件系统 与 磁盘驱动

1)文件系统

     使用目录项、文件属性等信息来管理文件,搜索文件时,必须通过文件系统才能找到被管理的文件。

2)磁盘驱动

     专门负责对磁盘上文件的读写操作:数据空间的读写操作 属性空间的读写操作(文件i节点空间)

3)需要注意的是

  对文件进行读写数据时,数据并不是一下子就写到文件中的,数据要经一系列缓存之后,驱动程序然后再将数写入文件

                              

int main(void)
{
	char buf[100];
	int a;//a也是缓存,用于临时存放整形数
	struct student stu;//也是一个缓存,用于临时存放某个学生的信息
	
	
	scanf("%s", buf);//从键盘输入数据,并暂时缓存到Buf中去,
	//缓存是什么:缓存其实就是程序开辟出来的,用于临时存放数据的内存空间
	//我们程序中开辟出来的,一切的变量空间,统统都是用于存放数据的缓存
	
	int fd;
	fd = open("/xxx.txt", 只写);
	write(fd, "hello world", 11);//调用系统函数write,将应用程序buf(缓存)中的数据,捣腾到内核中缓存中去
	
	
	return 0;
}

 

5)文件系统简单总结

· OS是借助文件系统来管理文件的。    
· OS会提供接口来对接具体的文件系统,在Linux下,对接具体文件系统的接口叫虚拟文件系统。

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章