• UNIX基础概念


    UNIX基本概念

    进程

    • 从用户观点来看:进程是程序的一个执行实例。
    • 从UNIX系统内部来看,是为运行程序提供执行环境的实体,是系统进行资源分配和调度运行的一个单位。

    进程有三个特点:

    1)进程有一个控制点和自己的独立地址空间。进程的控制点通过程序计数器跟踪着程序的指令序列。进程的地址空间由进程可以引用或访问的存储单元组成。进程在其他地址空间内执行程序的指令序列。

    2)进程具有生存期。进程从创建到消亡的过程称为进程的生存期。一个进程的生存期可以分为一组状态,这些状态刻画了进程从创建、活动到消亡的过程。从用户的观点祖略划分,UNIX系统中进程主要有以下状态:

    • 新建
    • 就绪:进程正在等待被执行
    • 运行
    • 阻塞:进程正在等待一个事件,如I/O
    • 僵死:进程已经结束,并等待释放资源。

    进程的简单状态转换图:

    image

    3)处于运行状态的进程有两种执行状态:用户态和核态。 若进程运行中执行的是用户程序中的指令,则进程处于用户态执行。当进程发出系统调用时,便进入核态执行。进程在核态下执行的是操作系统的指令,这些指令完成用户的请求,如输入输出、存储分配等。

    内核

    实现软件管理硬件系统任务的软件称为操作系统,在UNIX术语中称为UNIX内核。UNIX内核是一个底层的直接运行于硬件的程序,它控制着硬件,并创建、销毁和控制所有进程。

    UNIX体系结构图:

    image

    内核直接与硬件交互,向外提供UNIX系统调用接口,如read()、write()等。如shell以及date、ls和who之类的使用程序,通过系统调用请求内核完成各种操作,并在内核与调用程序之间交换数据。其他应用程序则在底层程序和工具的基础上构筑而成。

    shell

    UNIX内核负责管理和创建进程,用户的输入命令是由shell来执行。shell是UNIX系统中的一个命令解释程序,处于用户和UNIX系统之间,骑着协调用户与系统间的一致性、在用户与系统之间进行交互的作用。

    shell和内核 、使用程序和应用之间的关系:

    image

    shell种类:

    • sh
    • csh
    • ksh
    • bash

    当系统同时存在多个shell时,/etc/password文件中用户注册账户登记项的最后一个字段标明应当使用哪一种sehll。

    用户名与用户ID、用户组和组ID

    每个用户有一个账号,改账号有一个用户名和一个唯一的用户ID。

    用户可以组织成组,一个用户可以是一个或多个组的成员,其中一个组是用的初始组,简称组。如果该用户还属于其他组,则这些组称为该用户的附加组。用户组由系统管理员建立。/etc/group中登记了系统中存在的所有组和组ID,以及组内的用户。

    /etc/password记录了系统中所有的注册用户,每个用户有一个登记项,其中包含用户名、用户ID、用户组ID(指明该用户的初始组)等信息

    %grep zkj /etc/passwd zkj x: 500: 15: /home/zkj: /bin/bash
    同时,在/etc/ group文件包含如下内容
    grep zkj /etc/group users x: 15: zkj research: x: 17: Yang, zkj,
    Hc, zhang Lib: x: 20: wang zki
    那么,用户zk的用户D为500,组D为15。他是三个组的成员,这
    三个组是: users、 research和Lib。其中, users是他的初始组,
    research和Lib是他的附加组
    

    特权用户

    root(超级用户),用户ID为0。特权用户控制着整个系统的权力。

    系统调用和库函数

    系统调用时对操作系统的一种请求,它请求操作系统为用户程序完成某种工作。如:read()是一种系统调用,它请求操作系统将存贮在磁盘设备上的数据读入缓冲区。

    为避免用户随意访问设备造成混乱,用户必须向操作系统请求服务,由操作系统统一管理请求并提供服务。所有操作系统提供了定义好的、有限个数且直接进入内核的这类服务点,称为系统调用,也称程序设计与系统的接口

    系统中无论使用什么技术实现系统调用,它的定义中式用C函数来表示。UNIX让每一个系统调用有一个相同名字的C函数,应用程序使用与标准C库函数相同的方法调用这些函数,这些函数然后用系统要求的技术来启动适当的内核服务。

    库函数和系统调用不同,它可以不需要系统的介入来完成工作,并且也不是进入操作系统内核的入口点,尽管它们可以调用一至多个系统调用。如:printf需要调用write系统调用来完成输出,而复制 strcpy()和sin()则完全不需要操作系统的帮助。

    应用程序和系统调用、库函数调用

    image

    实现者角度,系统调用与库函数的区别:系统调用时UNIX内核提供的服务,而库函数处于内核之外;用户角度,没太大区分,系统调用和库函数均为普通的C函数,两者都服务于应用程序。

  • 相关阅读:
    Linux下Zookeeper安装使用
    Dubbo的@Reference和@Service说明
    java.lang.ClassNotFoundException: org.I0Itec.zkclient.IZkStateListener异常解决
    Java 开发常用工具
    Vue自动化路由(基于Vue-Router)开篇
    HTML5 开发APP( 支付宝支付)
    关于微信网页缓存的问题
    小程序(仿微信发布说说功能)
    移动端九宫格抽奖源码
    H5 + 开发App(分享功能)
  • 原文地址:https://www.cnblogs.com/followyou/p/9911771.html
Copyright © 2020-2023  润新知