【操作系统】知识积累

操作系统概论

64位和32位的区别

  • 操作系统只是硬件和应用软件中间的一个平台。32位操作系统针对的32位的CPU设计的。64位操作台系统针对64位的CPU设计的。
  • 64位可以一次性处理8个字节的数据量
  • 32位一致性只能处理4个字节的数据量。
  • 内存寻址空间不同
  • 运行软件不同,32位和64位CPU的指令集不同,但64位可以运行老的32位的指令。

CentOS和Linux的关系?

  • CentOS是Linux众多发行版本之一
  • Linux有三大发行版本,Slackware、debian、redhat

进程的描述与控制

请解释一下,Linux下的线程,GDI类

  • Linux实现的就是基于核心轻量级进程“一对一”线程模型,一个线程实体对应一个轻量级进程,而线程之间的管理在核外函数库中实现
  • GDI类为图像设备编程接口类库。
    进程和线程的区别是什么
  • 进程是执行者的应用程序,线程是进程内部的一个执行序列。一个进程可以由有多个线程。线程又叫做轻量级进程。
  • 进程和线程主要差别在于它们 是不同的操作系统资源管理方式。
    • 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响。
    • 线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以很多进程的程序要比很多线程的程序健壮,但在切换进程时,耗费资源大,效率低。对于一些要求同时进行又要共享某些变量的并发操作,只能用线程,不能用进程。
      1. 一个程序至少有一个进程,一个进程至少有一个线程
      1. 线程的划分尺度少于进程,使得多线程程序的并发性高
      1. 进程在执行过程中有用独立的内存单元,而多个线程共享内存,从而极大地提高了程序的巡行效率
    • 线程在执行过程中和线程存在区别。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立之星,必须依赖应用程序,由应用程序提供多个线程执行控制。
    • 逻辑角度看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。单操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配,这既是进程和线程的重要区别。

系统线程数量上限是多少?

  • Linux系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX。
  • 这个限制可以再/usr/include/bits/local_lim.h中查看,对linuxthreads这个值一般是1024,对nptl则没有硬性的限制,仅仅受限于系统的资源。
  • 这个系统的资源主要就是线程stack所占用的内存,用ulimit -s可以查看磨人的线程栈大小,一般情况下,这个值是8M=8192kb

如何杀死一个进程

  • kill pid
    –打开任务管理器,结束当前进程

输入输出系统

请介绍一下,socket编程的三种通信模型,BIO,NIO,AIO

  • 阻塞,非阻塞,IO多路复用
  • epoll支持文件符数目没有限制,fd集合只会从用户进程拷贝到内核一次,自己维护一个事件队列,不用每次遍历fd集合发现是否有就绪状态

存储器管理

你怎么理解操作系统里的内存碎片,有什么解决办法?

  • 内存碎片分为:内部碎片和外部碎片。
  • 内部碎片就是已经被分配出去(能够明确指出属于哪个进程)却不能被利用的内存空间。
  • 内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块,而在进程占有这块存储块时,系统无法利用它。直到进程释放,或进程结束时,系统才有可能利用这个存储块。
  • 单道连续分配只有内部碎片。多道固定连续分配既有内部碎片又有外部碎片。
  • 外部碎片指的是还有被分配出去(不属于任何进程),但由于太小了无法分配给申请空间的新进程的内存空闲区域。
  • 外部碎片是处于任何已分配区域或页面外部的空闲存储块。这些存储块的和可以满足当前申请的长度要求,但是由于地址不连续或其他原因,使得系统无法满足当前申请。
  • 使用伙伴系统算法。

介绍一下,什么是页式存储

  • 主存被等分成大小相等的片,称为主存块,又称为实页。
  • 当一个用户程序装入内存时,以页面为单位进行分配。页面的大小是2n,通常为1KB、2KB、2n KB等

请谈一谈,系统如何提高并发性

  • 提高cpu并发计算能力
    • 多进程&多线程
    • 减少进程切换,使用线程,考虑进程绑定CPU
    • 减少使用不必要的锁,考虑无锁编程
    • 考虑进程优先级
    • 关注系统负载
  • 改进I/O模型
    • DMA技术
    • 异步I/O
    • 改进多路I/O就绪通知策略,epoll
    • Sendfile
    • 内存映射
    • 直接I/O

请你解释一下,通常系统CPU比较高是什么原因

  • 首先查看哪些进程的CPU占用路最高(如下命令可以看到详细的路径)
    • ps -aux --sort -pcpu | more
  • 定位有问题的线程可以用如下命令:
    • ps -mp pid -o THREAD, tid, time | more
  • 查看Java进程的每个线程的CPU占有率
    • ps - Lp 5798 cu | more #5798是查出来进程PID
  • 追踪线程,查看负载过高的原因,使用JDK下的一个工具
    • jstack 5798 #5798是PID
    • jstack -J-d64 -m 5798 #-j-d64指定64位系统
    • jstack查出来的线程ID是16进制,可以把输出追加到文件,导出用记事本打开,再根据系统中的编程ID去搜索查看该ID的线程运行内容,可以和开发一起排查。

什么情况下会发生死锁?解决死锁的策略有哪些?

  1. 互斥条件:一个资源一次只能被一个进程访问。
  2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
  3. 不剥夺条件:进程已经获得资源,在未使用之前不能强行剥夺,而只能由该资源的占有者自行释放。
  4. 循环等待条件:若干资源形成一种头尾相接的循环等待资源关系。
  5. 解决方法:银行家算法。

线程与进程

线程的基本状态:

  • new(新建状态):线程被创建,但没调用start()方法。
  • Ready(可运行状态):线程等待运行调用start()方法,但还没获得CPU时间片。
  • runnable(运行状态):由获得cpu时间片后就处于运行状态。
  • wait(等待状态)线程进入等待状态,进入等待状态的线程需要依靠其他线程的通知才能返回运行状态
  • TIME_WAITING(超时等待状态):在等待的基础上增加了超时限制,如sleep/wait
  • BLOCKED(阻塞状态),线程在执行run()方法之后将会进入到TERMINATED(终止状态)
  • TERMINATED(终止状态):线程已经执行完毕。

注:
阻塞的情况分三种:

  • 等待阻塞:运行的线程执行wait()方法,JVM将线程放入等待队列(waiting queue)中
  • 同步阻塞运行的线程获取对象的同步锁时,该锁被其他线程获取,JVM把线程放入锁池(lock pool)中
  • 其他阻塞:运行的线程执行sleep()方法或join()方法,或者发出I/O请求时,JVM会把该线程设置为阻塞状态。

线程、进程、程序之间的概念和关系

  • 线程,任务调度的基本单位,多个线程共享一块内存和资源,一般一个进程中的多个线程共享该进程获取的计算机资源。被称为轻量级进程。
  • 进程,操作系统分配资源的最小单位,一个进程由一个或多个线程组成。占有系统资源。是程序的一次执行过程。各进程之间是独立的。
  • 程序,是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。

进程线程的区别

  • 包含关系:一个进程可以包含多个线程,一个线程只能在一个进程中运行
  • 内存共享:同一个进程下的所有线程能够共享该进程下的资源【系统运行时会为每个进程分配不同的内存区域,但不会为线程分配内存。线程只能管共享它所属进程的资源】
  • 销毁影响:进程结束后,该进程下的所有线程将销毁,而一个线程的结束不会影响同一进程下的其他线程
  • 线程作用:线程是轻量级进程,创建和销毁时间比进程小,所有操作系统的执行功能都是通过创建线程去完成的。
  • 线程特性:线程在执行时是同步和互斥的,由于共享一个进程下的资源

进程间的通信

进程间的通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息
IPC的方式通常有:管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等,其中Socket和Streams支持不同主机上的两个进程IPC。


管道
管道,通常指无名管道,是UNIX系统IPC最古老的形式。(除此之外还有高级管道、有名管道)

特点:

  • 半双工的,具有固定的读端和写端
  • 只能用于具有亲缘关系的进程通信(父子进程或兄弟进程)
  • 可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。但是它不是普通的文件,并不属于其他任何文件系统,只存在于内存

FIFO
FIFO,也称为命名管道,它是一种文件类型。

特点:

  • FIFO可以在无关的进程之间交换数据,与无名管道不同
  • FIFO有路径名与之关联,它以一种特殊设备文件形式存在于文件系统中。

消息队列
消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。

特点

  • 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级
  • 消息队列独立于发送与接收进程。进程终止时,消息队列及内容并不会被删除。
  • 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。

信号量
信号量与已经介绍过的IPC结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不适用于存储进程间通信数据。

特点

  • 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存
  • 信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作
  • 每次对信号量的PV操作不仅限于对信号量值加1或减1,而且可以加减任意正整数。
  • 支持信号量组

共享内存
共享内存,只两个或多个进程共享一个给定的存储区

特点

  • 共享内存是最快的一种IPC,因为进程是直接对内存进行存取。
  • 因为多个进程可以同时操作,所以需要进行同步
  • 信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值