0.目录

1.概念

2.系统资源

3.学习方法

4.从用户的角度来理解 Unix

5.从系统的角度来理解 Unix

6.小结

1.概念

概念:

  • Unix 系统包含用户程序和系统内核
  • 内核由多个子系统构成
  • 内核管理所有的程序和资源
  • 进程之间的通信对 Unix 程序是很重要的
  • 什么是系统编程

相关命令:

  • bc

一些术语:

  • 内存空间用来存放程序和数据,所有的程序都必须在内存空间中才能运行。
  • 用来容纳操作系统的内存空间叫做系统空间,容纳应用程序的内存空间叫做用户空间。
  • 操作系统也被称为内核。

什么是系统编程:

  • 程序要访问设备(如键盘、磁盘和打印机)必须通过内核,所以只有内核才能直接管理设备。程序如果要从键盘得到数据,必须向内核发出请求,若在显示器上显示结果,也要通过内核,程序中所有对设备的操作都是通过内核进行的。内核向程序提供服务以便程序能够访问到设备。
  • 解释了这些内容后,再来看什么是系统编程。编写普通程序时可以认为,程序是直接连到键盘、显示器、磁盘等设备的,但在进行系统编程时,必须对系统的结构和工作方式有更深的了解,要知道内核提供哪些服务( 系统调用 ),如何使用它们,系统有哪些资源和设备,不同的资源和设备该如何操作。

2.系统资源

内核提供服务以便系统程序可以直接访问系统资源,那么有哪些系统资源和服务呢?

  1. 处理器(Processor)

    • 程序是由指令构成的,处理器是执行指令的硬件设备,一个系统中可能有多个处理器。内核能够安排一个程序何时开始执行,何时暂时停止、恢复执行,何时终止执行。
  2. 输入输出(I/O)
    • 程序中所有输入/输出的数据、终端的输入/输出数据还有硬盘输入/输出数据,都必须流经内核,这种集中的处理方式有以下优点:正确性,数据流不会流错地方;有效性,程序员无需考虑不同设备之间的差异;安全性,数据信息不会被未被授权的程序非法访问。
  3. 进程管理(Process Management)
    • 进程指程序的一次运行,每个进程都有自己的资源,如内存、打开的文件和其他运行时所需的系统资源。内核中与进程相关的服务有新建一个进程、中止进程、进程调度等。
  4. 内存(Memory)
    • 内存是计算机系统中很重要的资源,程序必须被装载到内存中才可以运行。内核的职责之一是内存管理,在需要的时候给程序分配内存,当程序不需要的时候回收内存,内核还能够保证内存不被其他的进程非法访问。
  5. 设备(Device)
    • 计算机系统中可以有各种各样的外设,如磁带机、光驱、鼠标、扫描仪和数码摄像机等,它们的操作方式各不相同,内核能屏蔽掉这种差异,使得对设备的操作方式简单而统一。例如,一个程序想要从数码照相机中取出照片存储在计算机中,它只需向内核提出操作该资源的请求即可。
  6. 计时器(Timers)
    • 程序的工作与时间有关,有的需要定时被触发,有的需要等一段时间再开始某个动作,有的需要知道某一个操作消耗的时间,这些都涉及计时器,内核可以通过系统调用向应用程序提供计时器服务。
  7. 进程间通信(Interprocess Communication)
    • 在现实生活中人们通过电话、e-mail、信件、广播、电视等互相通信,在计算机的世界中,不同的进程也需要互相通信,内核提供的服务使进程间通信成为可能。就像电信和邮政提供的服务,通信也是资源。
  8. 网络(Networking)
    • 网络之间的通信可以看作是进程间通信的特殊形式,通过网络,不同主机上的进程,即使使用的是不同操作系统,也可以互相通信。网络通信也是内核提供的服务。

3.学习方法

本书通过以下 3 个步骤来学习:

  1. 分析程序

    • 首先分析现有的程序,了解它的功能及实现原理。
  2. 学习系统调用
    • 看程序都用到哪些系统调用,以及每个系统调用的功能和使用方法。
  3. 编程实现
    • 利用学到的原理和系统调用,自己编程实现原来程序所实现的功能。

以上 3 步可以通过下面 3 个问题来实现:

  • 它能做什么?
  • 它是如何实现的?
  • 能不能自己编写一个?

4.从用户的角度来理解 Unix

4.1 登录——运行程序——注销

用户登陆时,系统启动单独的一个 shell 进程来处理该用户的请求(多用户环境);用户注销时,系统结束分配给该用户的 shell 进程。

4.2 目录操作

用户登录后,可以对自己的文件进行操作。文件中可以有 e-mail、图片、源程序、可执行程序等各种各样的数据。文件被组织在目录中。

目录树:

目录操作命令:

  1. ls——列出目录内容
  2. cd——改变当前目录
    1. cd 命令的作用是改变当前的目录。当刚刚登录到系统中时,当前目录是自己的主目录,可以通过 cd 命令转到其他目录,如:
  3. pwd——显示当前目录
  4. mkdir、rmdir——新建、删除目录

目录操作命令的工作原理:

  • 涉及到系统怎么保存描述目录树的信息,以及不同目录操作命令对应的对这些信息的修改。

4.3 文件操作

文件存放在目录中,用户文件位于用户自己的主目录中,系统文件位于系统目录中。

文件命名规则:

  • 每个文件都有文件名,在大多数的 Unix 系统中,文件名最长可以是 250 个字符,很多字符都可以出现在文件名中,如大小写字符、标点符号、空格、tab,甚至回车符,但是不能包含根目录符号“/”。

文件操作命令:

  1. cat,more,less,pg——查看文件的内容
  2. cp——文件复制
  3. rm——文件删除
  4. mv——重命名或移动文件
  5. lpr,lp——打印文件

文件操作命令的工作原理:
同样涉及到系统怎么保存文件的控制信息和文件的数据信息,以及不同的文件操作命令对应的对这些信息的修改。

文件许可权限:
系统中每个用户都有自己的文件,出于很多原因,你不会希望别的用户能够修改自己的文件,甚至读也不行。系统中有一些管理命令,如果使用得不好会对系统造成损害,管理员不希望普通用户也有运行这些命令的权力。这些对文件和命令操作的限制是如何行使的呢?

每个文件都有文件所有者和 3 组许可权限:

5.从系统的角度来理解 Unix

5.1 网络桥牌

许多人都玩网络桥牌这个游戏,世界各地的玩家通过计算机网络连接到一起,游戏开始以后,参加者就可以看到一个共同的牌桌,能够看到别人出的牌,图 1.9 是一个简单的说明。

图 1.9 中有 4 个人,他们每人都有一台计算机,通过网络连接在一起。但图 1.9 中还少了牌桌,下面把它加上,如图 1.10 所示。

图 1.10 中增加了第 5 个实体——牌桌,牌桌位于服务器上,在 4 个玩家的眼里,牌是放在牌桌上的,他们也是通过牌桌才能够开始游戏。

在现实生活中玩牌的时候,人们轮流出牌,但在网络游戏中,是由谁来控制该哪一个人出牌?牌又存放在哪里?某个人手中有几张牌又意味着什么?如何来保证不让两个人有同一张牌?这在现实生活中不会有任何问题,但在虚拟的网络中确实要仔细考虑。

图 1.11 显示了在网络桥牌中的信息流。

网络桥牌的例子展示了 Unix 系统编程中 3 个重要的方面。

  • (1) 通信

    1. 某个用户或进程如何与其他用户或进程交换信息?
  • (2) 协作
    1. 在同一个时刻,网络桥牌的两个用户不会都去拿同一张牌,程序如何来协调多个进程使他们能够没有冲突地访问共享资源?
  • (3) 网络访问
    1. 在这个例子中,互相独立的计算机通过网络连接到一起,那么计算机中的程序是如何来使用网络的呢?

5.2 bc:Unix 的计算器

Unix 系统中的 bc 命令是执行一个基于字符的计算器程序,bc 有两个重要的特点。

要启动这个计算器,只要输入:

bc 的另一个重要特点是,从严格的意义上讲,bc 并不做任何计算。为了说明这一点,做如下操作:

ps 命令可以列出系统中运行的所有进程,这里一共有 4 个进程,除了两个 bc 外,bash 是 shell 进程,那么 dc 是什么?
在大多数的 Unix 系统中都提供了联机帮助,可以从那里得到需要的信息,要找关于 dc 的信息,只要输入:

读了 bc 的联机帮助就会知道,bc 是 dc 的预处理器,它将用户输入的表达式转换成逆波兰表达式,然后通过一个称为管道(pipe)的通信程序交给 dc,如图 1.12 所示。

用户输入中缀表达式如“2+2”,bc 将它转化为相应的后缀表达式形式,交给 dc 执行,dc 计算表达式的值,将结果返回给 bc,bc 再将结果以合适的形式显示在显示器上。所以对普通用户而言,bc 就是计算器。

5.3 从 bc/dc 到 Web

6.小结

  • 计算机系统中包含了很多系统资源,如硬盘、内存、外围设备、网络连接等,程序利用这些资源来对数据进行存储、转换和处理。
  • 多用户系统需要一个中央管理程序,Unix 的内核就是这样的程序,它可以对程序和资源进行管理。
  • 用户程序要访问设备必须经过内核。
  • 一些 Unix 的系统功能是由多个程序的协作而实现的。
  • 要编写系统程序,必须对系统调用和相关的数据结构有深人的理解。

学习《Unix/Linux编程实践教程》(1):Unix 系统编程概述的更多相关文章

  1. Go基础编程实践(八)—— 系统编程

    捕捉信号 // 运行此程序,控制台将打印"Waiting for signal" // 按Ctrl + C 发送信号以关闭程序,将发生中断 // 随后控制台依次打印"Si ...

  2. Unix/Linux环境C编程新手教程(21) 各个系统HelloWorld跑起来效果怎样?

    版权声明:本文为博主尹成联系QQ77025077,微信18510341407原创文章,欢迎转载侵权不究. https://blog.csdn.net/yincheng01/article/detail ...

  3. Unix/Linux环境C编程入门教程(21) 各个系统HelloWorld跑起来效果如何?

    Unix/Linux家族人员众多,我们无法一一讲解如何配置环境. 本文选定我们在前面安装的RHEL6 RHEL7 MAC10.9.3 Solaris11如何跑起来helloworld RHEL 6 上 ...

  4. 学习《Unix/Linux编程实践教程》(2):实现 more

    0.目录 1.more 能做什么? 2.more 是如何实现的? 3.实现 more 3.1 more01.c 3.2 more02.c 3.3 more03.c 1.more 能做什么? more ...

  5. Unix/Linux编程实践教程(0:文件、终端、信号)

    本来只打算读这本书socket等相关内容,但书写得实在好,还是决定把其余的内容都读一下. 阅读联机帮助的一个示例: open系统调用: read系统调用: Unix的time: 上面的printf可以 ...

  6. Unix/Linux编程实践教程(二:socket、多线程、进程间通信)

    同一接口不同的数据源: 协同进程: fdopen以文件描述符为参数: fopen和popen: 为了实现popen,必须在子进程中调用sh,因为只有shell本身即/bin/sh可以运行任意shell ...

  7. Unix/Linux编程实践教程(一:进程、管道)

    execvp在程序中启动新程序: 用fork创建新进程: forkdemo2代码: 测试fork的时候参考<Linux权威指南>阅读笔记(3)  使用了patch: [root@local ...

  8. Unix/Linux编程实践教程(三:代码、测试)

    测试logfilec.c的时候,有个sendto(sock,msg,strlen(msg),0,&addr,addrlen),编译时提示: logfilec.c:30: warning: pa ...

  9. Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)

    1. more第一版 实现基础功能,显示每一页固定24行文本,“q Enter”退出, “Enter” 下一行, “space Enter”下一页. #include<stdio.h> # ...

随机推荐

  1. [SDOI2009]HH的项链 BZOJ1878

    分析: 听说是莫队裸题,很显然,我并不喜欢莫队. 我们可以考虑将询问离线,以右端点排序,之后从1枚举到n,依次树状数组中修改i和last[i],之后当i==询问的右节点时,find一下答案就可以了. ...

  2. 同步IO和异步IO的区别

    首先一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作,同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO.非阻塞IO.IO服用 ...

  3. C++面试题:list和vector有什么区别

    C++面试题:list和vector有什么区别?考点:理解list和vector的区别出现频率:★★★★解析:vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随 ...

  4. 20155229《网络对抗技术》Exp6:信息收集与漏洞扫描

    实验内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 (4)漏洞扫描:会扫,会看报告,会查漏洞说明,会修补 ...

  5. Unity 图文重现官方教程视频 2droguelike 第一集

    初衷: 本人初学Unity,四处收集了一些视频和教材,学习和摸索了一段时间, 我发现官网教程简单易上手,只不过他是英文讲解不方便,我就想把他翻译翻译吧, 然后我又发现看视频学习要暂停回放好多遍,麻烦, ...

  6. Tomcat源码学习(1)

    Tomcat源码学习(1) IntelliJ IDEA 17.3.3 导入 Tomcat 9.0.6源码 下载源码 tomcat_9.0.6 启动 IDEA. 点击 Open,选择刚才下载的文件解压后 ...

  7. python之GIL理解

    GIL(Global Interpreter Lock) 全局解释器锁 python3中是假的多线程,它不是真正的并行,是利用了cpu上下文的切换而已.同一时间只能有一个线程使用共享数据,其它线程处于 ...

  8. cf 1029D

    题面 题目描述 给定含n个整数的数组a. 规定数x,y的合并为xy.如:数12与数3456的合并为数123456. 有数组中的位置对(i,j)(i≠j),计算使ai,aj的合并能被k整除的位置对数量. ...

  9. M1事后分析报告--We have power to change the origin state

    M1事后分析报告 设计与实现 我们发的软件解决的问题?是否满足后面小组的要求?是否能够完全拟合前期目标? 答: 前期我们的软件完成量并不是特别让人满意,我们组在完成这些任务量之后,发现有很多地方是在做 ...

  10. X86主要的几种寻址方式

    一.首先 P33: 严格来说有三种寻址方式 与数据有关的寻址方式 与转移指令或过程调用指令有关的寻址方式 与IO指令有关的寻址方式 这篇博客只讲1.2两条 二.然后 1. 与数据有关的寻址方式 数据, ...