操作系统到底是个啥?我们该如何学好这门课?

操作系统学习总结

        再没了解操作系统之前,我觉得这个东西好神秘,操作系统到底是个啥?我一直迷惑不解,尽管自己身为计算机专业的学生,但一直不知道一台电脑到底是如何构成的?带着这些问题,我开始了我学习操作系统的道路。也正是在这个过程中,让我更加地爱上了计算机!

        在学习过程中,我也看了一些关于操作系统的视频,有一些b站上的良心视频,还有王道考研的。在这里我要强烈推荐一个视频,正是这个视频让我对操作系统的学习产生了浓厚兴趣,也让我看清了操作系统到底是个啥。它就是b站上哈工大李志军老师的操作系统视频。我个人认为,讲的真的太棒了,很形象!我看了差不多两遍,有些涉及汇编知识的内容简略观看的,感觉收获很多,故而整理。

        言归正传吧,操作系统是在计算机组成原理之上的又一门学科,在组成原理的基础上学习操作系统,显得尤为重要。接下来,通过一个大体的框架来看一看,操作系统到底是个啥?
在这里插入图片描述        我个人觉得,在操作系统的学习过程中,头脑中有一个大体的框架是很有必要的,这个图就相当于一个大体框架,差不多就可把操作系统的知识串一遍。也便于理解操作系统的样子。

        我觉得学习操作系统,其实就是在理解一个过程,一个关于CPU、内存(用户区和系统区)、外设之间交互的过程。在交互的过程中涉及到系统态与用户态之间的转化,会涉及到进程的管理、内存的分配以及IO文件的输入输出等等。

        我想在这里通过一个自己理解的过程来串联起整个操作系统,如果有不对的地方,还请各位斧正,抱拳了。

启动

        首先当电源通电的一瞬间,PC机启动,主板上的BIOS启动,并对PC机的各个硬件进行检测(如果检测不通过则不会进入开机界面)。检测之后,将操作系统的相关信息以及启动所需 从磁盘中读入内存。之后操作系统及一些系统必要的程序都加载到了内存中,开机界面显示。

点击一个应用程序的图标背后,到底发生了什么?

        当我们点击了一个QQ的快捷方式时,其背后到底发生了什么?鼠标点击图标其实就是对应一个路径(一个文件的目录),也是一个指令。当cpu正在和内存交互的时候,鼠标点击了一下桌面上的图标,一条想要启动QQ的指令被存储到了鼠标的控制器上,鼠标通过其控制器向正在工作的cpu发送中断请求
在这里插入图片描述
        cpu接收到中断后,让出内存进而鼠标控制器传递信息,这时鼠标控制器通过数据总线,将要启动QQ的指令信息送入内存
在这里插入图片描述

        之后,cpu再读取内存中的指令信息,这里的指令信息其实就是一个文件路径,操作系统会通过文件路径得出对应的FCB,通过FCB进而找到磁盘的盘号,进而又找到程序在磁盘中的真正存放位置,是哪个磁道那个扇区。

        再之后cpu告诉磁盘的控制器,让它把运行程序用到的代码,准备好。
在这里插入图片描述

        磁盘准备好后向cpu发起中断请求。
在这里插入图片描述

        此时,同样像鼠标中断cpu那样,在向cpu中断请求之后,会向内存输入数据。
在这里插入图片描述

        不过这里,借机要引出一下段页式的存储。(理解段页式,分段和分页便不难理解)

        一个程序的启动会涉及到一系列的动作,编译、汇编、链接、重定向。其实预编译、编译、汇编3个阶段归结在一起就是我们常说的"编译"。在预编译和编译阶段,生成的文件是在磁盘上存储着,直到汇编阶段完成之后,将生成的可重定位的二进制文件(目标文件)存储在4G(假设32位cpu)的虚拟地址空间里,在虚拟地址空间里进行链接阶段的符号解析、分配地址和空间、符号重定位等工作,最后生成可执行文件(.exe)。当要运行此文件时,才将其以分页或分段的方式映射到内存上。

        由于鼠标点击的是一个.exe文件,我们可以认为,接下来我们要从段页式继续了。首先当前程序就是一个进程是在磁盘中的,接着通过一个映射关系,类似于一个段表,先将一个程序划分为好多的段,这些段是在虚拟空间中进行划分的,之后在将虚拟内存中的每一段又划分为多个大小相同的页,最后再存入内存中。

        在存入内存的过程中,会涉及到内存空闲空间划分的算法,这里不展开,假设都可以成功的送入内存。在虚拟内存中的信息送入内存时,不同的页放入内存的同时,对应的基址也会被记录到内核PCB中的一个表里,当程序执行时可以通过PCB中的信息,也就是每个页的基址找到真实的代码所在的物理地址。
在这里插入图片描述

        此时,程序进入到了内存,OS通过PCB对该进程进行控制和执行。到了这里一个程序执行的大体过程也就算结束了。

总结

         该过程中关于内核与用户态的转化没有涉及,所有的算法也没有涉及,经典的进程问题也没有涉及,死锁、文件中目录树的思想等都没有涉及到,cpu中虽然画上了MMU等也没有提到。

        没有提到,一是我很难通过一个例子把所有知识都融入进去,我的知识储备还不够,另外一点我觉得有了这样的一个操作系统的框架之后,其余的知识再做仔细的研究就不会这么吃力了。

        尽管就上述的这么一个简单的过程,却困扰了我很久,不过现在我自认为是串起来了,不知道是不是有些地方还有瑕疵,还请各位帮忙斧正。

        另外,在操作系统的学习过程中,我对好多问题不理解,不能把这个操作系统的框架串在一起。因此,我就时常把问题一个一个罗列出来,逐个击破。我遇到的问题有:
1.多级分页我不理解
2.外设显示器键盘等是如何工作的
3.cpu 内存 外设之间的交互
4.操作系统是干啥的
5.核心态和用户态的转化
5.一个程序在电脑上是怎么运行的,它的整个具体过程
6.等等。。

        但后来随着看视频学习,再加上查阅资料,我逐渐的解决了这些问题,也对操作系统有了更深一些的认识,尽管我深知我还停留在理论层面,但这让我有了一些学习中的成就感,尽管还差的远,但这激发了我的学习兴趣,使我感受到了计算机的乐趣。

        我深有感慨,为什么考研要考408了,408真的很重要,一个操作系统一个数据结构,可谓是计算机专业的内功了,练好了这个,别的再学起来我想也会更轻松。

最后分享一句话和大家共勉:

        人生总要有这么一段时光,纯粹而简单,疯狂而热烈,拼搏而勇敢。若干年之后,回忆起来,让自己感动,惊艳了时光,温柔了岁月,丰富了记忆,成为你人生一笔宝贵的财富。

  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rabbit Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值