zoukankan      html  css  js  c++  java
  • 操作系统知识点梳理

    • 进程和线程的区别联系

    进程和线程的关系:
    (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
    (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
    (3)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
    (4)线程是指进程内的一个执行单元,也是进程内的可调度实体。
    
    线程与进程的区别:
    (1)线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
    (2)系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
    (3)在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
    (4)每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
    • 线程调度

    线程调度:按照特定机制为多个线程分配CPU的使用权。
    有两种调度模型:
    分时调度:所有线程平分cpu的时间片,轮流占用CPU
    抢占式调度:根据优先级占用CPU
    
    调度算法:根据系统的资源分配策略所规定的资源分配算法
    (1)时间片轮转法
        在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU 分配给队首进程,并令其执行一个时间片。时间片的大小从几ms 到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。
    (2)高响应比优先调度算法
    在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优先权,并使作业的优先级随着等待时间的增加而以速率a 提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为:
    响应比=(等待时间+服务时间)/服务时间
    根据公式可知:
    当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业。
    当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。
    对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。克服了饥饿状态,兼顾了长作业。
    (3)先来先服务算法
    先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
    (4)最短优先调度算法
    最短优先调度算法是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
    • Linux进程间通信(IPC)

    (1)管道(Pipe)
    管道包括三种:
    ①普通管道PIPE: 通常有两种限制,一是单工,只能单向传输;二是只能在父子或者兄弟进程间使用.
    ②流管道s_pipe: 去除了第一种限制,为半双工,只能在父子或兄弟进程间使用,可以双向传输.
    ③命名管道:name_pipe:去除了第二种限制,可以在许多并不相关的进程之间进行通讯.
    (2)消息队列( message queue )
    ①消息队列可以认为是一个全局的一个链表,链表节点钟存放着数据报的类型和内容,有消息队列的标识符进行标记。
    ②消息队列允许一个或多个进程写入或者读取消息。
    ③消息队列的生命周期随内核。
    ④消息队列可实现双向通信。
    (3)共享内存( shared memory ) 
    共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两两配合使用,来实现进程间的同步和通信。
    (4)信号 ( sinal )
    信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
    (5)套接字( socket ) 
    套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。
    (6)信号量( semophore )
    信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
    •  协程

    协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。
    从编程角度上看,协程的思想本质上就是控制流的主动让出(yield)和恢复(resume)机制。yield让协程暂停,和线程的阻塞是有本质区别的。协程的暂停完全由程序控制,线程的阻塞状态是由操作系统内核来进行切换。因此,开销更小。
    缺点:
    1.协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程。
    2.协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程。
    • Linux常用命令

    1. awk
    awk是行处理器,是以文件的一行内容为处理单位的。awk读取一行内容,然后根据指定条件判断是否处理此行内容,若此行文本符合条件,则按照动作处理文本,否则跳过此行文本,读取下一行进行判断。
    awk   'condition { action }'   filename    处理指定文件的内容
    command | awk ' condition { action }'     处理某个命令的执行结果
    注:condition:条件。若此行文本符合该条件,则按照 action 处理此行文本。不添加条件时则处理每一行文本;
    action:动作。按照动作处理符合要求的内容。一般用于打印指定的内容信息;
    
    2. top
    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
    
    3. netstat
    查看本机开启端口号
    
    4. grep
    用于查找文件里符合条件的字符串。
    grep "被查找的字符串" 文件名    从文件内容查找匹配指定字符串的行
    grep –e "正则表达式" 文件名    从文件内容查找与正则表达式匹配的行
    
    5. less
    对文件或其它输出进行分页显示的工具
    
    6. tail
    用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件
    • Linux的权限命令

    r:代表权限是可读,r也可以用数字4表示

    w:代表权限是可写,w也可以用数字2表示

    x:代表权限是可执行,x也可以用数字1表示

     chmod u=rwx,g=rw,o=r aaa.txt  等价于 chmod 764 aaa.txt

  • 相关阅读:
    【06】SQL语句之创建数据库
    【05】数据类型
    【02】SQL Server 配置管理器基本使用
    【01】连接到数据库引擎
    MySQL学习记录【02】常用数据类型
    MySQL学习记录【01】主键
    [转]九个Console命令,让js调试更简单
    HTML5中引入的关键特性
    [转]CSS hack大全&详解
    [转]IE8兼容Object.keys
  • 原文地址:https://www.cnblogs.com/strong-FE/p/12107089.html
Copyright © 2011-2022 走看看