UNIX基本概念

进程

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

进程有三个特点:

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

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

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

进程的简单状态转换图:

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

内核

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

UNIX体系结构图:

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

shell

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

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

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()则完全不需要操作系统的帮助。

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

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

UNIX基础概念的更多相关文章

  1. nginx架构与基础概念

    1       Nginx架构 Nginx 高性能,与其架构有关. Nginx架构: nginx运行时,在unix系统中以daemon形式在后台运行,后台进程包含一个master进程和多个worker ...

  2. [转帖]从0开始的高并发(一)--- Zookeeper的基础概念

    从0开始的高并发(一)--- Zookeeper的基础概念 https://juejin.im/post/5d0bd358e51d45105e0212db 前言 前面几篇以spring作为主题也是有些 ...

  3. 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍

    第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...

  4. SDCC 的 MCS-51 汇编基础概念和传参方式

    寄存器 Register 寄存器用于数据的临时存储, 其数据可以表示为 用于处理的数据字节 指向数据的地址 寄存器的结构 8051的寄存器几乎都是8位寄存器, 因为8位MCU处理的主要是8位数据, 如 ...

  5. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  6. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  7. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  8. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  9. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

随机推荐

  1. Sensitivity, specificity, and reproducibility of RNA-Seq differential expression calls RNA-Seq差异表达调用的灵敏度 特异性 重复性

    Sensitivity, specificity, and reproducibility of RNA-Seq differential expression calls RNA-Seq差异表达调用 ...

  2. [Training Video - 1] [Selenium Basics] [What is Selenium]

    What is Selenium? Browser Automation Testings Tool: Mozilla IE 6,7,8 Google Chrome Opera 8,9,10 Safa ...

  3. yum 系列(一) yum 和 rpm 常用命令

    yum 系列(一) yum 和 rpm 常用命令 一.yum 常用命令 yum 命令:http://man.linuxde.net/yum yum 是在 Fedora 和 RedHat 以及 SUSE ...

  4. Mybatis之整体描述

    Mybatis在我看来最大的用处就是封装了jdbc,设置参数操作和获取解析结果集.同时控制了数据库链接等操作,大部分采用了反射来映射javabean对象来进行数据库操作. 1.接下来先整体介绍下主要的 ...

  5. Ural 1519 Formula 1 (DP)

    题意:给定一个 n * m 的矩阵,问你能花出多少条回路. #pragma comment(linker, "/STACK:1024000000,1024000000") #inc ...

  6. 2016-2017 《移动平台开发》实验三 敏捷开发与XP实践

    概述 软件=程序+软件工程 软件企业=软件+商业模式 XP是一种轻量(敏捷).高效.低风险.柔性.可预测.科学而且充满乐趣的软件开发方式. 在更短的周期内,更早地提供具体.持续的反馈信息. 在迭代的进 ...

  7. Linux 非阻塞connect,错误码:EINPROGRESS

    当我们以非阻塞的方式来进行连接的时候,返回的结果如果是 -1,这并不代表这次连接发生了错误,如果它的返回结果是 EINPROGRESS,那么就代表连接还在进行中. 后面可以通过poll或者select ...

  8. Java对象和XML转换

    有时候,我们需要把Java对象转换成XML文件.这时可以用JAXB来实现.(JDK1.6及以后的版本无需导入依赖包,因为已经包含在JDK里了) 假如某个公司有许多部门,每个部门有许多职员,我们可以这样 ...

  9. Android-bindService本地服务-初步-Service返回对象

    在Android开发过程中,Android API 已经有了startService方式,为什么还需要bindService呢? 答:是因为bindService可以实现Activity-->S ...

  10. [C#]如何解决修改注册表受限问题(转)

    在项目中添加一个Application Manifest File,名字默认为app.manifest,内容中应该有一行: <requestedExecutionLevellevel=" ...