java(六)—操作系统

参考链接:[(https://github.com/Snailclimb/JavaGuide/blob/master/docs/operating-system/basis.md)]
这篇博客主要是自己查漏补缺的,所以都是参考的上面链接的内容,大家如果想深入了解,还是点击上面链接哦!

1、什么是操作系统?

  • 操作系统 operating system,是管理计算机软硬件资源程序
  • 操作系统屏蔽了硬件层的复杂性。它是硬件的使用负责人。
  • 操作系统的核心部分是内核 kernel,负责系统的内存管理、硬件设备的管理、文件系统的管理、应用程序的管理。是连接应用程序和硬件的桥梁

在这里插入图片描述

2、什么是系统调用?

系统调用指的是操作系统对资源进行调用。这里涉及到用户态和系统态两个概念。
用户态:可以直接读取用户程序的数据,电脑上运行的程序基本上都运行在用户态。
系统态:几乎可以访问计算机的任何资源。
如果用户程序需要进行调用系统态级别的资源,就必须通过系统调用方式向os提出请求,由os代为完成。

系统调用的分类:

  • 设备管理。设备的请求、启动与释放。
  • 文件管理。文件的读、写、创建、删除等。
  • 进程控制。进程的创建、阻塞与唤醒。
  • 进程通信。进程之间的消息传递或者信号传递等。
  • 内存管理。内存的分配、回收,以及获取作业占用内存的大小以及地址等。

3、进程和线程的区别?

从JVM的角度来说,一个进程可以包括多个线程。
多个线程共享堆和元空间,每个线程有自己的程序计数器、虚拟机栈和本地方法栈
二者最大不同:进程之间是独立的,线程不一定,因为同一进程的线程可能会相互影响。

进程之间的通信方式有哪些?

大概有7种常见的通信方式:

  • 管道。用于父子进程或者兄弟进程之间的通信。
  • 命名管道。它是以磁盘的方式存在,可以实现本机的任意两个进程通信。
  • 信号量。主要是通过计数器来解决线程间的同步问题,避免出现竞争。
  • 共享内存。多个进程可以访问同一块内存空间,不同进程可以及时的看到对方对共享数据的更新。
  • 消息队列。存放在内核中,只有内核重启或显示的删除一个消息队列时,它才会被真正的删除。消息队列可以实现消息的随即查询,不一定以fifo次序读取,也可以按消息的类型读取。
  • 套接字。它是用在客户端和服务端之间,通过网络进行通信。支持tcp/ip协议。

4、线程间的同步方式?

线程同步是两个或者多个共享关键资源的线程的并发执行。同步的目的是避免关键的资源使用冲突。
一般os有三种线程同步的方式:

  • 互斥量。只有拥有互斥对象的线程才能访问公共资源。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如java中的sunchronized关键字和lock都是这种机制。
  • 信号量。允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。(pv)
  • 事件。使用通知操作的方式来保持多线程同步。

5、进程的调度算法?

主要目的是为了实现最大的cpu利用率

  • 先来先服务调度算法(FCFS):从就绪队列中选择一个最先进入该队列的进程,为之分配资源并立即执行,直到完成或者被阻塞。
  • 短作业优先调度算法(SJF):从就绪队列中选择一个估计运行时间最短的进程,为之分配资源并立即执行,直到完成或者被阻塞。
  • 时间片轮转调度算法:每个进程被分配一个时间段,称为他的时间片,即该线程允许运行的时间。
  • 多级反馈队列调度算法:既能使高优先级的作业得到响应又能使短作业迅速完成。是目前公认的一种比较好的进程调度算法。
  • 优先级调度算法:给每个进程分配优先级,按照优先级从高到低进行调度。

6、操作系统内存管理?

os内存管理主要管理两部分内容;
(1) 内存的分配和回收
(2)地址转换:将逻辑地址转换为相应的物理地址

7、os的内存管理机制了解吗?有哪几种?

  • 连续分配管理方式:为一个用户程序分配一个连续的内存空间。常见的有块式管理

  • 非连续分配管理方式:允许一个程序使用不连续的内存空间。常见的有页式管理、段式管理和段页式管理。

  • 块式管理:将内存分为几个固定大小的块,每个块中只包含一个进程。程序需要的时候就会被分配一块内存,但是如果运行只需要很小的空间的话,这块大内存就会被浪费了。容易产生内存碎片

  • 页式管理:将内存分为大小相等且固定的一页一页的形式,页比块小提高了内存的利用率,减少了碎片。

  • 段式管理:把内存分为一段一段的,段是有实际意义的,每个段定义了一组逻辑信息,例如 主程序段MAIN,子程序段X,数据段D,栈段S。

  • 段页式管理:结合了段式和页式的优点,先把内存分为若干段,每一个段又被划分为若干页。

对于上面段具有实际意义的理解:
参考网址:
将一个人每隔50cm进行切割,这叫分页;将一个人分割为头部、身体、腿部三部分,这叫分段。
程序进行分页时,页的大小是固定的,程序根据页的大小硬生生的被分开;分段的话是这一段程序有完整的意义才分割开。
在这里插入图片描述

8、快表和多级页表

分页内存管理中,有两点很重要哦:

  • 虚拟地址到物理地址的转换要快;
  • 解决问题:虚拟地址空间大,页表也会很大的问题;

快表:
为了解决虚拟地址到物理地址的转换速度,os在页表方案基础之上引入了快表目的是加速虚拟地址到物理地址的转换。快表可以理解为一种特殊的高缓cache,其中的内容是页表的一部分或者全部内容。由于采用页表做地址转换,读取内存数据时cpu需要访问两次内存,有了快表,有时只需要访问一次高缓,一次内存,这样可以提高查找速度。类似于redis。

使用快表之后的地址转换流程是这样的:

  • 根据虚拟地址中的页号查快表;
  • 如果该页在快表中,直接从快表中读取相应的物理地址;
  • 如果该页不在快表中,就访问内存中的页表,再从页表中得到物理地址,同时将页表中的该映射表项添加到快表中;
  • 当快表填满后,又要登记新页时,就按照一定的淘汰策略淘汰掉快表中的一个页。

多级页表
主要目的是为了避免把全部页表一直放在内存中占用过多的空间。为了提高内存的空间性能。

9、分页机制和分段机制的异同?

共同点:
1、都是为了提高内存的利用率,产生较少的空间碎片;
2、页和段都是离散存储的,每个段和页内的内存是连续的;

区别:
页的大小是固定的,由os决定;段大小不固定,取决于当前运行的程序;
分页仅仅是为了满足os内存管理的需求;段是逻辑信息的单位,在代码中体现为代码段、数据段等。

10、cpu寻址?为什么需要虚拟地址空间呢?

现代处理器使用的是一种称为“**虚拟地址”**的寻址方式。cpu需要将虚拟地址翻译成物理地址。
cpu中的内存管理单元负责将虚拟地址翻译成物理地址。

为什么需要虚拟地址空间呢?

如果没有虚拟地址空间,程序就会直接访问和操作物理内存。很有可能破环系统,造成操作系统崩溃。
还有个问题就是不能同时运行多个程序。比如你想同时运行一个微信和一个 QQ 音乐都不行。为什么呢?举个简单的例子:微信在运行的时候给内存地址 1xxx 赋值后,QQ 音乐也同样给内存地址 1xxx 赋值,那么 QQ 音乐对内存的赋值就会覆盖微信之前所赋的值,这就造成了微信这个程序就会崩溃。

11、什么是虚拟内存?

虚拟内存可以让程序使用超过物理内存大小的可用空间。而且虚拟内存让每个进程认为自己拥有一片连续完整的内存空间,其实通常是多个物理内存碎片。可以有效的进行内存管理
虚拟内存技术实际上就是建立了“内存——外存”的两级存储器结构,利用局部性原理实现高速缓存。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值