听说微信搜索《Java鱼仔》会变更强哦!

本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦

(一)什么是操作系统

操作系统管理着计算机的硬件和软件,它是软件和硬件能够交互的基础。从本质上来讲,操作系统还是一个运行在计算机上的程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

(二)用户态和系统态是什么

所谓用户态和系统态,其实是cpu的一种状态。

用户态也称为普通态,用户态运行的进程可以直接读取用户程序的数据,我们运行的程序基本都是在用户态。

内核态也叫特权态,cpu可以访问计算机的任何资源。

区分为用户态和系统态是最主要原因是要把用户程序和系统程序区分开,以利于程序的共享和保护。

用户态访问内核态的功能的方式叫做系统调用,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如fork()实际上就是执行了一个创建新进程的系统调用。

系统调用按功能大致可以区分为:

1、设备管理。完成设备的请求或释放,以及设备启动等功能。 2、文件管理。完成文件的读、写、创建及删除等功能。 3、进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。 4、进程通信。完成进程之间的消息传递或信号传递等功能。 5、内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。

(三)进程、线程和程序的区别

程序是指含有指令和数据的文件,或者说程序是静态的代码。 进程是系统运行程序的基本单位,一个进程就是一个执行中的程序。进程是独立运行的个体。 线程是比进程更小的执行调度单位,一个进程在执行中可以产生多个线程,多个线程共享同一块内存空间和系统资源。 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。

(四)进程有哪几种状态

操作系统的进程有五种状态:

创建状态(new):进程正在被创建,还未到就绪状态

就绪状态(ready):这是指进程已经准备好运行的状态,即进程已分配到除CPU以外所有的必要资源后,只要再获得CPU,便可以立刻执行。这是指进程已经准备好运行的状态,即进程已分配到除CPU以外所有的必要资源后,只要再获得CPU。

运行状态(running):进程正在处理器上上运行(单核 CPU 下任意时刻只有一个进程处于运行状态)。

阻塞状态(waiting):正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态,即进程执行受到阻塞。即使此时cpu处于空闲也无法执行。

结束状态(terminated):进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运行

(五)进程间的通信方式有哪些

每个进程都有自己的地址空间,不同进程之间是不可见的,如果进程间需要通信的话必须通过内核,在内核中开辟一块缓冲区,一个进程把数据拷贝到内核缓冲区,其他进程把数据从内核态读取到用户态。这种机制称为进程间通信。 进程间通信的方式有多种:

管道/匿名管道(pipes):用于父子进程和兄弟进程之间数据的传递,管道的本质是一个内核缓冲区,管道一端的进程将数据顺序写入缓冲区,另一端的进程将数据顺序读入。

有名管道(Name pipes):有名管道通过FIFO的方式进行传递,有名管道的文件形式存在于文件系统中,可以实现本机任意两个进程之间的通信。 信号(signal):Linux系统中用于进程间互相通信或者操作的一种机制,信号可以在任何时候发给某一进程,而无需知道该进程的状态。

消息队列(Message Queuing):消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识、消息队列允许一个或多个进程向它写入与读取消息、消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取.比FIFO更有优势。消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺。

共享内存(share memory):使得多个进程可以可以直接读写同一块内存空间,是最快的可用IPC形式。由于多个进程共享一段内存,因此需要依靠某种同步机制(如信号量)来达到进程间的同步及互斥。

信号量(Signal):信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在于进程间同步

套接字(Socket):套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行。也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信。

(六)操作系统中进程的调度算法

操作系统中的进程调度算法目的是为了确定进程的执行顺序,从而最大化利用CPU资源

先到先服务(FCFS):从就绪队列中选择等待时间最长的进程(就是最早进来的进程),等待进程执行完成或者放弃CPU时再重新选择。 轮转法(Round Robin):也叫做时间片轮转法,每个进程被分配一个时间片,轮流执行。

短作业优先(SJF):从就绪队列中选择预计运行时间最短的进程,等待进程执行完成或者放弃CPU时再重新选择。

优先级调度:给每个进程分配一个优先级,从就绪队列中选择优先级最高的进程,等待进程执行完成或者放弃CPU时再重新选择。

多级反馈队列调度算法:

(1)设置多个就绪队列。在系统中设置多个就绪队列,并为每个队列赋予不同的优先级,从第一个开始逐个降低。不同队列进程中所赋予的执行时间也不同,优先级越高,时间片越小。

(2)每个队列都采用FCFS(先来先服务)算法。轮到该进程执行时,若在该时间片内完成,便撤离操作系统,否则调度程序将其转入第二队列的末尾等待调度......。若进程最后被调到第N队列中时,便采用RR方式运行。

(3)按队列优先级调度。调度按照优先级最高队列中诸进程运行,仅当第一队列空闲时才调度第二队列进程执行。若优先级低队列执行中有优先级高队列进程执行,应立刻将此进程放入队列末尾,把处理机分配给新到高优先级进程。

(七)操作系统的内存管理机制

操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),操作系统中内存的分配可以简单分为连续分配和非连续分配:

连续分配为用户分配一个连续的内存空间,可以将一个进程分散的装入内存分区。常见的如块式管理。

非连续分配根据分区的大小是否固定可以分成分页存储管理(固定)与分段存储管理(不固定),为了避免两者的缺点,还可以二者混用成段页式存储管理。

页式管理:把主存分为大小相等且固定的一页一页的形式,页较小,相对相比于块式管理的划分力度更大,提高了内存利用率,减少了碎片。页式管理通过页表对应逻辑地址和物理地址。

段式管理:段式管理在页式管理的基础上,将内存划分为更小的段,段式管理把主存分为一段段的,每一段的空间又要比一页的空间小很多 。但是,最重要的是段是有实际意义的,每个段定义了一组逻辑信息,例如,有主程序段 MAIN、子程序段 X、数据段 D 及栈段 S 等。 段式管理通过段表对应逻辑地址和物理地址。

段页式管理:段页式管理机制结合了段式管理和页式管理的优点。简单来说段页式管理机制就是把主存先分成若干段,每个段又分成若干页,也就是说 段页式管理机制 中段与段之间以及段的内部的都是离散的

分页和分段的区别: 1、页是信息的物理单位,分页的主要目的是为了实现离散分配,提高内存的利用率。分页仅仅是系统管理上的需求,安全是系统行为对用户是不可见的;段是信息的逻辑单位,分段的主要目的是更好地满足用户需求,一个段通常包含一组数语一个逻辑板块的信息。分段是用户可见的,用户编程时需要显示的给出段名。

2、页的大小是固定的,系统决定;段的大小是不固定的,取决于系统程序

3、分页的用户地址空间是一维的,程序员只需要给出一个记忆符就可以表示一个地址,分段存储管理的地址空间是二维的,程序员需要在标识一个地址的时候,既要给出段名,也要给出段内地址

4、分段比分页更容易实现信息的共享和保护 注意:不能修改的代码称为纯代码(可重入代码),这样的代码段不是临界资源,可以共享。可修改的代码是不可以共享的(比如由很多变量的代码段) 比如:生产者进程的一个进程段,是用来判断该缓冲区此时是否可以访问,这个时候消费者进程的段表项也可以指向这里 为什么分业管理不方便实现代码共享? 因为将生产者进程分段,由于页面的空间有限,一段可能被装入多个空间,一个空间也可能有多个代码段被装进来,所以适合共享,达不到安全的效果

5、分页:内存空间利用率高,不会产生外部碎片,只有少量的内部碎片;不方便按照逻辑模块实现信息的共享与保护

分段:方便按照逻辑模块实现信息的共享与保护;如果段太长,为其分配很大的存储空间很不方便,容易产生外部碎片(这个虽然可以用前面的一些紧凑技术解决一部分,但是时间代价很大)

(八)什么是虚拟内存

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

虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间)。这样会更加有效地管理内存并减少出错。

(九)页面置换算法

在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。

常见的页面置换算法有如下几种:

OPT页面置换算法: 这种算法选择永不使用或者最长时间内不会被访问的页面进行替换,但是现在无法预知哪个页面在未来是最长时间内不会被访问的,因此这种算法只能算作理论上。 FIFO页面置换算法:先进先出,淘汰最先进入内存的页面。 LRU(Least Currently Used)页面置换算法:最近最久未使用,淘汰最近最久未使用的页面。 LFU(Least Frequently Used)页面置换算法:最少使用页面置换算法,淘汰之前使用时间中使用最少的页面。

这篇文章我会持续更新,有任何错误指出或者更多相关知识推荐欢迎在评论区留言,我是鱼仔,我们下期再见!

西农JAVA作业提交系统_Java程序员需要知道的操作系统知识汇总(持续更新)相关推荐

  1. Java需要掌握的底层知识_java程序员需要知道的底层知识(一)

    首先给自己一个介绍,本人是一个蠢笨蠢笨的女程序员,由于有一天突然觉悟了,想在学习的过程中写一些笔记,以前一直不敢开始这个事情,因为我害怕写错了,误导了别人,现在还是害怕,如果真的误导了同行,你们也轻点 ...

  2. java后期发展方向_Java程序员的4个职业发展方向,该如何把握黄金5年?

    在Java程序界流行着一种默认的说法叫"黄金5年",意思是说,一个Java程序员从入职的时候算起,前五年我选择直接影响着整个职业生涯的发展方向和薪资走向. 而这5年,也决定了一个程 ...

  3. java ide 的优劣_Java程序员的困惑 Java IDE到底怎么选

    原标题:Java程序员的困惑 Java IDE到底怎么选 Eclipse和IntelliJIDEA可以说是程序员们最常用的两个IDE开发工具了.IntelliJIDEA被认为是目前Java开发效率最快 ...

  4. 招聘java是什么意思_java程序员,一般招聘都要求些啥

    原标题:java程序员,一般招聘都要求些啥 java程序员,一般招聘都要求些啥?某位企业领导说,他不能确认什么样的人一定是他想要的,因为优秀的程序员精通的点并不完全相同,项目也千差万别,但至少要有几个 ...

  5. java垃圾回收菜鸟_java程序员不懂JVM内存回收,两年后也是个菜鸟

    java程序员不懂JVM内存回收,两年后也是个菜鸟 在学java程序员的时候,如果你还不懂JVM内存回收,那么你就只能是个很一般的程序员菜鸟了,那么什么是JVM内存回收呢?今天我们就来学习,都还不深入 ...

  6. java软件学习网站_Java程序员必看的十大学习网站

    无论是作为资深Java程序员,还是刚刚Java入门的小白,都不可缺少平时学习的网站.以下小编收集了Java程序员必看的十大学习网站,这些网站可以提供信息.以及一些很棒的讲座 , 还能解答一般问题.面试 ...

  7. java职业发展路线图_Java程序员如何选择未来的职业路线

    一.程序员的特性 技术出身的职场人特性很明显,与做市场.业务出身的职场人区别尤其明显.IT行业中常见的一些职场角色:老板.项目经理.产品经理.需求分析师.设计师.开发工程师.运维工程师等.开发工程师具 ...

  8. java增删改查_Java程序员你真的甘心只做增删改查吗

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 最 ...

  9. java有哪些技术_Java程序员,最常用的20%技术有哪些?

    两个月,这让我想到了我当年第一份工作,也是两个月从零学JAVA.当时就买了3本书,强啃了6周.记住一点,时间有限,别听网上很多大牛的,他们说的太杂.你要抓重点,你只要让人家知道,你足够初级开发就可以了 ...

  10. java核心技术 pdf下载_JAVA程序员面试秘笈 PDF 下载_Java知识分享网

    相关截图: 资料简介:Ja程序员目前就业形势较好,因为Ja的应用太广泛了,从网页开发到手机安卓开发,都离不开Ja.<Ja程序员面试秘笈>是一本解析Ja面试题的书,可以帮助求职者更好地准备面 ...

最新文章

  1. 初识contiki(2.7版本)
  2. 从0到1使用Kubernetes系列(四):搭建第一个应用程序
  3. Oracle从小白到大牛的刷题之路(建议收藏学习)
  4. 前端学习(908):location常用方法
  5. java基础——equals及==的区别
  6. 帮管客CRM客户管理系统
  7. script链接标签前置无法读取的解决
  8. java BIO/NIO/AIO 学习
  9. Linux下java web服务器搭建(JDK1.6、MySQL5.1、Apache2.2+2...
  10. yolo批量检测图片
  11. “自贸云”+“自贸大数据”将加速辽宁自贸区建设与创新
  12. python+qqbot实现qq聊天机器人
  13. 什么是响应式网页设计?
  14. 安卓代码播放手机本地视频
  15. 【测试与自动化】介绍-框架-Jest-覆盖率-异步代码-e2e-Vue测试
  16. 元气骑士+蒲公英联机平台联机教程
  17. python爬虫 bing壁纸
  18. [IC面经] 华为海思 暑期实习生
  19. 制作镜像实例之healthcheck
  20. 电信 IPRAN 设备组网方案_全国首个智慧家庭全光组网服务在成都上线!

热门文章

  1. c语言else语句,C# if…else 语句 | 菜鸟教程
  2. 比较算盘和计算机的优点,UPD4526BC 二进制与十进制相比较的优点
  3. char **p作为参数被修改_opencv第1课-加载、修改、保存图像
  4. Android意图Intent总结代码
  5. ajax下拉搜索框,jQuery的带搜索过滤ajax加载下拉框插件
  6. 下载图片的java工具类_ftputil 下载图片工具类
  7. C# 中反射获取某类的子类和根据类型名动态创建对象(转载)
  8. ASP.NET 备忘
  9. Centos 7安装和配置 ElasticSearch入门小白
  10. 1024程序员 | 我如何从零基础转行成为一个自信的前端