操作系统(1)

学习内容:

1、 显示主页的过程
2、 状态码
3、 各种协议与http之间的关系
4、HTTP长连接 短连接


学习时间:

1、 周一至周五晚上 7 点—晚上10点
2、 周六上午 9 点-上午 11 点
3、 周日下午 3 点-下午 6 点


1.1 什么是操作系统?

  1. 操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基⽯;
  2. 操作系统本质上是运⾏在计算机上的软件程序 ;
  3. 操作系统为⽤户提供⼀个与系统交互的操作界⾯ ;
  4. 操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应⽤程序,⽽内核就是能操作硬件的程序)。

1.2 什么是系统调⽤呢? 能不能详细介绍⼀下。

根据进程访问资源的特点,我们可以把进程在系统上的运⾏分为两个级别:
1. ⽤户态(user mode) : ⽤户态运⾏的进程或可以直接读取⽤户程序的数据。
**2. 系统态(kernel mode)😗*可以简单的理解系统态运⾏的进程或程序⼏乎可以访问计算机的任何资源,不受限制。

说了⽤户态和系统态之后,那么什么是系统调⽤呢?
我们运⾏的程序基本都是运⾏在⽤户态,如果我们调⽤操作系统提供的系统态级别的⼦功能咋办呢?那
就需要系统调⽤了!

也就是说在我们运⾏的⽤户程序中,凡是与系统态级别的资源有关的操作(如⽂件管理、进程控制、内
存管理等),都必须通过系统调⽤⽅式向操作系统提出服务请求,并由操作系统代为完成。

这些系统调⽤按功能⼤致可分为如下⼏类:
**设备管理。**完成设备的请求或释放,以及设备启动等功能。
**⽂件管理。**完成⽂件的读、写、创建及删除等功能。
**进程控制。**完成进程的创建、撤销、阻塞及唤醒等功能。
**进程通信。**完成进程之间的消息传递或信号传递等功能。
**内存管理。**完成内存的分配、回收以及获取作业占⽤内存区⼤⼩及地址等功能。

2.1 进程和线程的区别

**从上图可以看出:**⼀个进程中可以有多个线程,多个线程共享进程的堆和⽅法区 (JDK1.8 之后的元空间)资源,但是每个线程有⾃⼰的程序计数器、虚拟机栈 和 本地⽅法栈。
总结: 线程是进程划分成的更⼩的运⾏单位,⼀个进程在其执⾏的过程中可以产⽣多个线程。线程和进程最⼤的不同在于基本上各进程是独⽴的,⽽各线程则不⼀定,因为同⼀进程中的线程极有可能会相互影响。线程执⾏开销⼩,但不利于资源的管理和保护;⽽进程正相反。

2.2 进程有哪⼏种状态?

我 :我们⼀般把进程⼤致分为 5 种状态,这⼀点和线程很像!
**1、创建状态(new) :**进程正在被创建,尚未到就绪状态。
**2、就绪状态(ready) :**进程已处于准备运⾏状态,即进程获得了除了处理器之外的⼀切所需资源,⼀旦得到处理器资源(处理器分配的时间⽚)即可运⾏。
**3、运⾏状态(running) :**进程正在处理器上上运⾏(单核 CPU 下任意时刻只有⼀个进程处于运⾏状态)。
**4、阻塞状态(waiting) :**⼜称为等待状态,进程正在等待某⼀事件⽽暂停运⾏如等待某资源为可⽤或等待 IO 操作完成。即使处理器空闲,该进程也不能运⾏。
**5、结束状态(terminated) :**进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运⾏。

2.3 进程间的通信常⻅的的有哪⼏种⽅式呢?

**1. 管道/匿名管道(Pipes) :**⽤于具有亲缘关系的⽗⼦进程间或者兄弟进程之间的通信。
2. 有名管道(Names Pipes) : 匿名管道由于没有名字,只能⽤于亲缘关系的进程间通信。为了克服这个缺点,提出了有名管道。有名管道严格遵循先进先出(first in first out)。有名管道以磁盘⽂件的⽅式存在,可以实现本机任意两个进程通信。
**3. 信号(Signal) :**信号是⼀种⽐较复杂的通信⽅式,⽤于通知接收进程某个事件已经发⽣;
**4. 消息队列(Message Queuing) :**消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。管道和消息队列的通信数据都是先进先出的原则。与管道(⽆名管道:只存在于内存中的⽂件;命名管道:存在于实际的磁盘介质或者⽂件系统)不同的是消息队列存放在内核中,只有在内核重启(即,操作系统重启)或者显示地删除⼀个消息队列时,该消息队列才会被真正的删除。消息队列可以实现消息的随机查询,消息不⼀定要以先进先出的次序读取,也可以按消息的类型读取.⽐ FIFO 更有优势。消息队列克服了信号承载信息量少,管道只能承载⽆格式字 节流以及缓冲区⼤⼩受限等缺。
**5. 信号量(Semaphores) :**信号量是⼀个计数器,⽤于多进程对共享数据的访问,信号量的意图在于进程间同步。这种通信⽅式主要⽤于解决与同步相关的问题并避免竞争条件。
**6. 共享内存(Shared memory) :**使得多个进程可以访问同⼀块内存空间,不同进程可以及时看到对⽅进程中对共享内存中数据的更新。这种⽅式需要依靠某种同步操作,如互斥锁和信号量等。可以说这是最有⽤的进程间通信⽅式。
7. 套接字(Sockets) : 此⽅法主要⽤于在客户端和服务器之间通过⽹络进⾏通信。套接字是⽀持TCP/IP 的⽹络通信的基本操作单元,可以看做是不同主机之间的进程进⾏双向通信的端点,简单的说就是通信的两⽅的⼀种约定,⽤套接字中的相关函数来完成通信过程。

2.4 那线程间的同步的⽅式有哪些呢?

线程同步是两个或多个共享关键资源的线程的并发执⾏。应该同步线程以避免关键的资源使⽤冲突。操作系统⼀般有下⾯三种线程同步的⽅式:
1. 互斥量(Mutex):采⽤互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有⼀个,所以可以保证公共资源不会被多个线程同时访问。⽐如 Java 中的synchronized 关键词和各种 Lock 都是这种机制。
**2. 信号量(Semphares) :**它允许同⼀时刻多个线程访问同⼀资源,但是需要控制同⼀时刻访问此资源的最⼤线程数量
**3. 事件(Event) :Wait/Notify:**通过通知操作的⽅式来保持多线程同步,还可以⽅便的实现多线程优先级的⽐较操

2.5 你知道操作系统中进程的调度算法有哪些吗?

1、先到先服务(FCFS)调度算法 : 从就绪队列中选择⼀个最先进⼊该队列的进程为之分配资源,使它⽴即执⾏并⼀直执⾏到完成或发⽣某事件⽽被阻塞放弃占⽤ CPU 时再重新调度。
2、短作业优先(SJF)的调度算法 : 从就绪队列中选出⼀个估计运⾏时间最短的进程为之分配资源,使它⽴即执⾏并⼀直执⾏到完成或发⽣某事件⽽被阻塞放弃占⽤ CPU 时再重新调度。
3、时间⽚轮转调度算法 : 时间⽚轮转调度是⼀种最古⽼,最简单,最公平且使⽤最⼴的算法,⼜称 RR(Round robin)调度。每个进程被分配⼀个时间段,称作它的时间⽚,即该进程允许运⾏的时间。
**4、多级反馈队列调度算法 :**前⾯介绍的⼏种进程调度的算法都有⼀定的局限性。如短进程优先的调度算法,仅照顾了短进程⽽忽略了⻓进程 。多级反馈队列调度算法既能使⾼优先级的作业得到响应⼜能使短作业(进程)迅速完成。,因⽽它是⽬前被公认的⼀种较好的进程调度算法,UNIX 操作系统采取的便是这种调度算法。
5、优先级调度 : 为每个流程分配优先级,⾸先执⾏具有最⾼优先级的进程,依此类推。具有相同优先级的进程以 FCFS ⽅式执⾏。可以根据内存要求,时间要求或任何其他资源要求来确定优先级

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值