Chapter01-计算机系统漫游-下

1.操作系统管理硬件
  • (1).真正操纵硬件的是操作系统,操作系统可以看成是应用程序和硬件之间的中间层。所有的应用程序对硬件的操作必须通过操作系统来完成,这样做的目的是:首先,防止硬件被失控的应用程序所滥用;其次,操作系统提供统一的机制来控制这些复杂的底层硬件。

操作系统管理硬件.jpg

  • (2).为了实现操作系统对硬件的操纵,操作系统引入了几个抽象的概念。文件是对IO设备的抽象、虚拟内存是对内存和磁盘IO的抽象、进程是对处理器、内存及IO设备的抽象。

操作系统的抽象机制.jpg

2.进程的解释—以shell命令行中执行./hello命令为例进行说明
  • (1).最开始的时候只有shell进程在运行,即shell在等待命令行的输入。

命令输入.jpg

  • (2).当通过shell进程加载hello进程时,shell进程通过系统调用来执行我们的请求。系统调用会将控制权从shell进程传递给操作系统,操作系统保存shell进程的上下文。然后,创建一个新的hello进程及其上下文。接着,将控制权转交给新的hello进程。hello进程执行完成后,操作系统会恢复shell进程的上下文,并且将控制权交给shell进程,之后shell进程继续等待下一个命令的输入。

进程上下文切换.jpg

  • 上下文:操作系统会跟踪进程运行中所需要的所有状态信息,这种状态(例如:当前PC和寄存器的值、内存中的内容等)称为上下文。
3.线程的解释
  • 现代操作系统中一个进程由多个线程组成,每个线程都运行在进程的上下文中,共享代码和数据。

线程.jpg

4.虚拟内存
  • 操作系统为每个进程提供了一个假象,即每个进程都在独自占用整个内存空间。每个进程看到的内存都是一样的,称之为虚拟地址空间。

进程的虚拟地址空间.jpg

  • 进程的虚拟地址空间:从下往上,地址是增大的。第一个区域是用来存放程序的代码和数据的,这个区域的内容是从可执行目标文件中加载而来的。对所有进程来说,代码都是从固定的地址开始的;第二个区域是堆heap,malloc所申请的地址空间就在这个堆中的,堆可以在运行时动态的扩展和收缩;第三个区域是共享库的存放区域,这个区域存放C语言的标准库和数学库这类共享库的代码和数据;第四个区域是用户栈,函数调用的本质就是压栈;第五个区域是为内核保留的区域,应用程序的代码不能读写这个区域的数据,也不能直接调用内核中定义的函数,这个区域对应用程序不可见;
5.文件
  • Linux中一切皆文件,键盘、鼠标、磁盘、显示器,甚至网络这些都可以看成是文件,系统中所有的输入和输出都可以通过读写文件来完成。

文件抽象.jpg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值