第一章 概述

1.1 前言

本章讨论系统的概念,从硬件、操作系统角度更加深刻的理解计算机系统,并快速浏览Linux系统提供的服务。

1.2 系统组成

1.3 操作系统和应用程序

操作系统这个词语有二意性,有时候指内核,有时候指内核和系统工具软件的组合。

操作系统是管理系统硬件的软件。操作系统是直接运行在裸机之上。其他应用软件运行在操作系统之上。

操作系统本身提供操作接口,支持用户通过该接口来操作 系统,但是系统本身提供的功能,不足于完成用户需求时,则需要开发应用程序来拓展系统功能。

发行版:
不同的公司使用Linux内核,加上自己开发的系统工具软件,一起发布的Linux操作系统版本。

1.4 启动和登陆

配置文件:
/etc/profile:系统启动时被执行
~/.bashrc:用户登陆时会调用

1.5 文件

文件是一个重要的概念,一般定义为信息的集合。计算机做为信息处理的机器,文件是计算机处理的对象。

在Unix和Linux系统中,泛化了文件的概念,设备也被抽象成文件对象来进行操作。

数据的集合叫做文件。
IT行业处理信息:转换,传输,存储

1.6 程序、进程

1.7 错误处理

系统调用在一般情况下返回整数,并且0表示成功,小于0表示失败。当系统调用返回失败时,可以通过errno获得错误嘛,通过strerror获取错误解释,或者直接通过perror在标准错误文件中,输出错误信息。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
// 通过open返回的整数,在linux中有个特别的名字
// 叫文件描述符 file description 简称fd

int fd = open("a.txt", O_WRONLY|O_CREAT|O_EXCL, 0777);
if(fd < 0)//表示文件打开失败
{
perror("open");
return 0;
}

// 把指针放到文件开头
lseek(fd, 0, SEEK_SET);

// 对文件进行操作
write(fd, "hello", 5);

// 关闭文件,如果不关闭,内存会泄漏
// 当进程退出时,未关闭的文件会自动关闭
close(fd);

}

1.8 用户、组、文件权限

Linux是多用户系统,支持多个用户同时登陆系统。
为了安全起见,需要对系统的权限加于规范。

1.9 信号

信号是进程通信的一种手段,某个进程收到信号,该信号可能来自内核、来自其它进程或者来自用户操作。例如:当用户按下ctrl+c时,其实是给前台进程发送了一个信号。

1.10 系统调用和库函数

学习Linux系统开发接口时,程序员也需要学习一般常用的第三方库,来拓展程序员的编程能力。

User Space和Kernel Space是操作系统编程中常用的概念,表示当前的代码在用户空间还是内核空间运行,对于不同的运行空间,CPU对内存的处理方式稍有不同,在讲进程虚拟地址空间时再涉及该概念。

系统调用指操作系统内核提供的功能,它提供了接口给用户空间代码调用。比如open/read/write/close等,都是属于Linux系统操作接口,而fopen/fread/fwrite/fclose是属于C标准提供的接口,在Linux下,fopen其实底层调用了open。

配置文件:
/etc/profile:系统启动时被执行
~/.bashrc:用户登陆时会调用

文件操作

头文件:sys/types.h  sys/stat.h  fcntl.h  例:int fd=open(“文件路径”,mode);  mode决定了对文件的操作方式   第三个参数可有可无,对文件权限进行处理,   因umask存在,创建文件权限要与上000 000 010的反,导致用户权限开始不能有写的权限

mode选项

解释

O_RDONLY

读方式打开(与后面俩个互斥)

O_WRONLY

写方式打开

O_RDWR

读写方式打开

O_CREAT

创建文件,如果文件存在,直接打开

O_TRUNC

截断

O_APPEND

追加

O_EXCL

和O_CREAT一起用,如果文件存在则失败

函数:

perror:对某种错误信息进行打印

open/creat:打开文件/创建文件
read:读文件
write:写文件
close:关闭文件
lseek:定位文件读写位置
fcntl:修改文件属性
sysconf:读取系统配置
dup/dup2:复制文件描述符
sync/fsync/fsyncdata:同步文件数据
mmap/munmap:文件映射
mkstemp:得到临时文件路径

命令

touch:修改文件的访问时间,创建文件
cat:访问文件内容
vim:编辑
ulimit:显示一些限制信息(文件描述符最大值、栈的空间尺寸)
umask:文件创建的权限掩码
getconf:对应sysconf

dd:可以拷贝块设备,但是要sudo权限  例  dd if=位置 of=文件名  bs=一次多少k cout=拷贝次数

Wc:计算文件的行数  单词个数 字节数

unlink:删除软链接

信号

是控制进程通信的一种方式,效率高,成本低

信号处理方式:掩盖、忽略、默认处理

掩码:延迟信号的处理  运用信号集合

掩盖不可靠信号,多次发送,只处理一次   掩盖:可靠信号  处理多次

进程

fork()创建

线程

鼠标键盘都是只读的字符文件夹设备,所以可以运用函数进行监控  一般在/dev/input/mic 文件下面  注意权限问题  鼠标键盘读取数据,是俩个进程,注意进程的阻塞问题  可以运用字进程和父进程进行处理

线程的创建 

pthread_created(1,2,3,4) //1:线程的id  2:线程的的属性  3:新线程的函数名字, 4:新线程的属性    要链接  -lpthread  库

注意子线程是依附主线程的,主线程结束,子线程无法运行     这个 pthread_exit(0)主线程结束,子线程没有退出例外

运用pthread_equal  判断线程是否相等,先等返回0  不相等返回非零值

pthread_jion(1,&ret)  阻塞调用 1:线程id  ret:线程返回值

pthread_t tid = pthread_self()  得到当前运行进程的id

进程和线程的区别:

进程:分配资源的单位  线程:调度的单位     多线程可以共享全局变量

避免俩个线程同时操作全局变量,第一个线程运用了锁,后面的线程在外面等,等待解锁后,后面的线程在进来

死锁

连续俩次加锁,加锁后,没有解锁,又继续加锁,会导致死锁。 运用循环锁,可以重复加锁   通过定义锁的属性,变为循环锁  例:pthread_mutexattr_t attr;  pthread_mutexattr_init(&attr);  pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);pthread_mutex_init(&mutex,&attr)

加锁后,忘记解锁,也会出现死锁  C++中运用析构函数,可以避免忘记解锁,定义一个类

读写锁

pthread_rwlock_t mutex;

pthread_rwlock_init(&mutex, NULL);

读/写锁定pthread_rwlock_rd/wrlock(&mutex);

解锁:pthread_rwlock_unlock(&mutex);

守护进程

守护进程不和终端关联,注意此进程只能有一个,创建文件记录,判断此程序是否开启

编程规则:

设umask=0;

调用fork,让父进程退出。    让父进程变为init,  如果父进程不退出,用俩次fork()

调用setuid创建新会话  setsid

重设当前目录/根目录     chdir

关闭不需要的文件描述符    运用循环关闭所有文件描述符

高级IO

一个进程就是一段指令

IO复用技术

select的运用

运用文件描述符集合  运用fd_set创建文件描述符集合  文件接口相对较小,跨平台运用

FD_SET(1,2) 将文件描述符放入文件描述符集合  1:文件描述符  2:集合名字

epoll的运用

epollfd  创建文件描述符集合

epol_ctl将文件描述加入集合中

非阻塞IO

管道

一边读,一边写

匿名管道  pipe()创建管道

mmap  可以实现有亲子关系进程的文件共享  效率低,数据写入内存,在从内存中读取数据  运用shm_open实现文件共享也可以

文件内存共享,无法进行通信

通过锁,让进程共享内存进行通信  pthread_mutex_init  需要将锁放在共享内存中

fork  +  exec 让进程有不同的功能

转载于:https://www.cnblogs.com/w-x-me/p/6394115.html

Linux基础第一章 概述相关推荐

  1. Linux基础第一章:基础知识与基础命令

    目录 一.虚拟机的三种网卡模式 二.基础知识 2.1  shell的内外部命令 2.2可以使用type命令来区分内外部命令 2.3命令行头解释 2.4文件具体信息含义 2.5命令行格式 三.基础命令 ...

  2. Linux基础第一章:基础知识与基础命令(第三部分)

    目录 一.基础命令 1.mv命令 2.rename命令 3.file命令 3.which命令 4.locate命令 5.find命令 6.cat命令 7.tac命令 8.rev命令 9.more.le ...

  3. 数字图像处理:第一章 概述

    第一章 概述 数字图象处理是一门关于如何用计算机对图象进行处理的学科,本课程主要讲解基本原理和方法,针对计算机系的学生,强调编程实践和建立图象处理应用系统的方法.推荐的教材与图象编程参考书包括: R. ...

  4. 《Abaqus GUI程序开发指南(Python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型...

    本节书摘来自异步社区<Abaqus GUI程序开发指南(Python语言)>一书中的第1章,第1.1节,作者: 贾利勇 , 富琛阳子 , 贺高 , 周正光 更多章节内容可以访问云栖社区&q ...

  5. 计算机文化基础第一章知识点题,计算机文化基础第一章习题与答案

    <计算机文化基础第一章习题与答案>由会员分享,可在线阅读,更多相关<计算机文化基础第一章习题与答案(8页珍藏版)>请在人人文库网上搜索. 1.计算机文化基础第一章习题与答案1 ...

  6. 计算机网络第一章(概述)

    第一章 概述 1.1因特网概述 1.1.1网络.互联网和因特网 网络(Network),由若干结点(Node) 和连接这些结点的 链路(Link) 组成. 多个网络还可以通过路由器互联起来,这样就构成 ...

  7. 第一章 概述_TCP-IP

    第一章 概述 [TCP/IP 详解] 1.1体系结构原则 Internet 体系结构在几个目标的指导下建立的.在 [C88] 中,描述的首要目标是 "发展一种重复利用已有的互联网络的技术&q ...

  8. 计算机网络基础 第一章

    计算机网络基础 第一章 计算机网络概述 1.1 计算机网络的产生与发展 1.1.1 面向终端的计算机通信网 20世纪50年代到20世纪60年代末,计算机技术与通信技术初步结合 1.1.2 以共享为目标 ...

  9. 计算机网络 知识点归纳 第一章 概述

    第一章-概述 互联网的概述 网络的网络 计算机网络(简称为"网络") 由若干节点(node)和链接这些节点的链路 (Link)组成. 网络中的节点可以是:计算机,集线器,交换机或路 ...

最新文章

  1. [coursera machine learning] Week 1
  2. DISPLAY环境变量的作用
  3. html frame 菜单切换,官方底部导航如何通过frame0.html的JS控制切换
  4. 网站品牌词指数提升的四大方法
  5. android rxbus 一个页面监听,Android RxBus的使用
  6. 玩游戏计算机丢失msvcp,Win10系统玩吃鸡提示游戏缺少msvcp140.dll的解决方法
  7. Java 垃圾回收机制
  8. linux 下配置邮件发送功能
  9. 无法安装程序包“xxx”。你正在尝试将此程序包安装到目标为“.NETFramework,Version=v4.5”的项目中
  10. MOS管自举电路工作原理以及升压自举电路结构图分析
  11. 极客大学python训练营目录_极客大学算法训练营笔记
  12. 对于刺头,怎么办?9个套路支招
  13. 计算机系统结构 计算机系统结构的基本概念
  14. OpenCV_连通区域分析(Connected Component Analysis-Labeling)
  15. 自考2018版《管理经济学》第一章导论——思维导图
  16. open连接MySQL超时_mysql5 超时链接
  17. 在windows 10下编译可在windows xp下使用的 opencv 3.2
  18. 即试即买丨帕克西首推假发自动售卖机,3D发型试戴变革假发购物体验!
  19. 大道至简,职场上做人做事做管理
  20. Java POI导出Excel

热门文章

  1. avaya http文件服务器,avaya 通讯服务器配置
  2. 计算机怎样选定硬盘,如何给电脑分盘
  3. 基于区域生长算法的图像分割python_图像分割中区域生长算法的程序设计与实现...
  4. 中文与Unicode码互转(utf-8)
  5. logic回归是一种线性回归
  6. 多个高维数组使用npz保存
  7. C语言手撸搜索(查找)二叉树---创建,插入,删除
  8. python 中的真值表
  9. IntelliJ IDEA 旗舰版(Ultimate) 破解与注册(可以在加载界面显示自己名字)
  10. 提高mysql千万级大数据SQL查询优化30条经验