一:启动流程:

      操作系统(os)是存放在disk(磁盘上:c盘)

     BIOS(BASIC INPUT OUPUT SYSTEM)  一开机(通电源)=====检查外设(加电自检===网卡在哪,显卡在哪。。。),加载软件(先加载bootloader====将os的代码和数据读入内存=======cpu的控制权在bootloader),运行os(cpu控制权转到os)------------------->os处理软件发出的指令【系统调用】(异步或同步),os处理软件发生的异常(同步)os感知外设变化。如网络中断,声卡损坏。。【中断】(异步)

    BOOTLoader【位于硬盘第一扇区512byte】:将os从磁盘加载进内存,让cpu可以执行os

 

1.中断:

       硬件:cpu将内外事件设置中断标记,中断事件的id       软件:保存当前状态,清除中断标记

2.异常:

       os保存现场,异常处理(kill program,restart program)  恢复现场

 

3.系统调用:

   printf(“hi,os”) ==============>在哪个外设上打印【屏幕】,打印什么【hi,os】       这一步相关os会提供相应的API供程序去调用。系统调用:cpu形态发生改变,切换成os自己的堆栈。       应用程序的函数调用是用户态,使用的应用程序的堆栈

附:用户态 :cpu以该形态只能执行权限很低的机器指令                      内核态:cpu以该形态可执行任意一条机器指令

         

 

二:计算机结构:

操作系统笔记

 

操作系统笔记

  内存

            是CPU直接寻址存储空间(特点是存取速率快)(存的是:临时的或少量的数据和程序)它是无记忆存储,断电数据就没了,好比用记事本敲了一天的代码(内存),结果忘了保存(外存)电脑就关机了,那么重启电脑,你辛辛苦苦写的代码肯定就从内存中丢掉了。它的定义是相对于外存而言的。for example:书房里,存放书籍的书架和书柜相当于电脑的外存,而我们工作的办公桌就是内存(像什么RAM,Cache....

           内存有=============>RAM(随机存储器,掉电信息丢【静态RAM:SRAM,又叫一级缓存。。。。。。。。。。动态RAM:DRAM,又叫二级缓存。。。。。。。。二级缓存存储速度《一级缓存】) 和ROM(只读存储器,断电信息也不会丢)

  外存:

             与内存定义相反的那就是外存了。

  缓存:

             是CPU的一部分,它存在于CPU中

  地址空间:

          os完成逻辑与物理地址的映射

           物理地址空间:真实的磁盘地址:如:C:\Program Files\MySQL\MySQL Server 5.7\log.txt

          逻辑地址空间:供内存访问(地址是虚的,需要os映射成真实的磁盘地址):int a;a就是一个逻辑地址 :1001003

         操作系统笔记

       外碎片,内碎片:

                   没有被使用的空间

        动态内存分配:(连续内存分配)

                   首次适配【400b======>3kb^^^,5kb,500b】,最优适配【500b^^^不会拆散3kb的空间】,最差适配【2kb^^^】

 

        非连续分配(虚拟的内存地址)

                      段机制访问寻址::连续逻辑地址拆分成一段一段的逻辑地址------>cpu寻址,根据OS建立的段表,追踪到其所对应的--------------连续的所处的物理地址

                

 

           操作系统笔记

 

             操作系统笔记

 

                       页寻址机制:16bit的地址空间,9bit(512byte)大小的页帧。物理地址=(3【页帧号】,6【页帧偏移量】)=(2^9)*3+6=1542  

操作系统笔记

 

附:

   1.1 什么是堆:

       堆通常是一个可以被看做一棵树的数组对象

      堆总是一棵完全二叉树

      堆是在程序运行时,而不是在程序编译时

       堆是指程序运行时申请的动态内存

      一般由程序员分配释放

     栈使用的是一级缓存

    1.2.什么是栈:

         栈(stack)又名堆栈

         栈(Stack)是操作系统在建立某个进程时或者线程,为这个线程建立的存储区域

         由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等

         堆则是存放在二级缓存

操作系统笔记

 硬盘速度远远慢于内存速度(造成的原因就是cpu寻址的方式不同),为了解决内存容量小:

 手动覆盖(首先要有常驻内存,打标签:那些是常用的程序,那些是不常用的。在同一块内存区分时执行这些任务【现有A调用BC,B调用D,C调用EF,则内存区分三块,A,BC,DEF,A调B执行完后,释放B所占内存,将C读入到B的内存区....c覆盖了b】,小部分放入)--->自动交换(建立内存交换区,bc执行完后,用ef交换bc,,大跨步的放入。但对于某些任务,这个步子就有点大了,造成了空间的浪费,效率的不高效)-------->

虚拟内存:

            通过分页将代码,数据读入内存。使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间)的一种技术,而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换

for example:页面大小为4k,分配给每个进程的页面数为1,定义int A[1024][1024],数组按行存入内存,每行放在一个页面\

a0,0   a0,1   a0,2........a0,1023    1

a1,0   a1,1   a1,2........a1,1023    2

...............................

................................

a1023,0  a1023,1............a1023,1023  1024

   较差的程序:

   for(j=0;j<1024;j++)

   for(i=o;i<1024;i++)

    A[i][j]=0;

1,2,3...1024,1,2,......1024,1,2..1024...共发生1024*1024次缺页中断

 

调优:

 for(i=0;i<1024;i++)

   for(j=o;j<1024;j++)

    A[i][j]=0;

1,1,1....(1024个,1),2,2,2.....(1024个2),3,3,3.,1024,1024,1024.....共发生1024次缺页中断,大小为4b*1024=4kb内存

 

三.进程:

      1.1 概念:正在进行的应用程序的状态的描述,如占用了多少cpu的资源,调用了多少外设)     

      1.2 包括:代码,数据,程序计数器中的值(指示下一条运行指令的地址),大量寄存器(存放当前值,堆,栈),一组系统资源(打开的文件)

     1.3 理解: 一程序对应多个进程,又由于程序与程序之间的相互调用关系,一进程,可包含多程序。

       进程是暂时的(像OS发出指令),是动态的(随着用户的输入的数据的不同而不同),程序的是永久的(存放于磁盘)

     程序可以简单理解为代码。程序=代码。进程=程序+数据+进程状态信息

    1.4 特点:

            并发行,独立性

     1.5 补充:

             一时刻,多进程:并行           一时间段,多进程:并发

     1.6开启进程:

              程序计数器【寄存器】指定进程指向哪,栈指针【寄存器】知道代码间调用关系。实现是用汇编来实现的

 

四.线程:

    1. 定义:线程=进程 - 共享资源

      2.为什么使用线程:

       mp3播放软件:    读取.mp3文件数据      --------解压缩数据   ------------------播放解压缩后的音频数据【组合了计算机外存的各个资源】

      单线程:

             while(true){

                     read();

                    decompress();

                     play();         

          }

 

         多线程:     

//读文件线程  
 while(true){

                     read();

          }   

 

//解压线程
   while(true){

                    decompress()

          }   
//播放线程   
while(true){
                     play();         

          }   

          3. 缺点:一线程崩,一进程的所有线程都崩             

 

五。调度问题:

 

六:同步问题

 

七:信号量和管程

 

八:IPC  进程通信 inter process connection                                    

 

九:文件系统

 

十:虚拟文件系统

            是允许和操作系统使用不同的文件系统实现的接口。虚拟文件系统(VFS)是物理文件系统与服务之间的一个接口层,VFS并不是一种实际的文件系统。它只存在于内存中,不存在于任何外存空间

相关文章: