第一章 概述

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 让进程有不同的功能

Linux基础第一章 概述的更多相关文章

  1. 【译文连载】 理解Istio服务网格(第一章 概述)

    书籍英文版下载链接为 https://developers.redhat.com/books/introducing-istio-service-mesh-microservices/,作者 Burr ...

  2. (linux shell)第一章--小试牛刀(上)

    来源:(linux shell)第一章--小试牛刀(上) 从今天開始,我们一起来学习<linux shell脚本攻略>这本书. 1.1简单介绍 shell脚本一般是一个以#!起始的文本文件 ...

  3. perl5 第一章 概述

    第一章 概述 by flamephoenix 一.Perl是什么?二.Perl在哪里?三.运行四.注释 一.Perl是什么?      Perl是Practical Extraction and Re ...

  4. 计算机网络课程优秀备考PPT之第一章概述(一)

    为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 以上,是<计算机网络>课程的第一章概述.

  5. TCP/IP详解 卷1 第一章概述

    第一章概述 1.2 分层 网络编程通常分不同层次进行开发,每一层负责不同的通信功能. 一个协议族比如TCP/IP,通常是一组不同层次上多个协议的组合.一般可以认为是是四层协议系统: 链路层:有时也称作 ...

  6. (linux shell)第一章--小试牛刀(下)

    文章来源: (linux shell)第一章--小试牛刀(下) 1.6 数组和关联数组 1.6.1 预备知识 Bash同一时候支持普通数组和关联数组.普通数组仅仅能使用整数作为数组索引,而关联数组能够 ...

  7. 20190804-Python基础 第一章

    学习爬虫的同时,补充学习更多Python的基础知识,才能让所学更加扎实. 至今,所学的很多东西,基础都不牢固,导致这些所学都是浅尝则止的皮毛,不能真正上战场,故借速成之心,踏实打牢基础,举一反三,以求 ...

  8. Camel In Action 阅读笔记 第一部分概述 + 第一章概述 认识Camel

    第一部分: 最开始的一小步 Apache Camel 是一个开源集成框架,其目的是让系统集成变得更加简便,在本书的第一章中,我们会为您介绍它并向您展示它是如何在大型企业应用中做好集成工作.您也会了解到 ...

  9. [Wolfgang Mauerer] 深入linux 内核架构 第一章 概述

    作为Linux开发爱好者,从事linux 开发有两年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动,分 ...

  10. 【菜鸟学习Linux】-第一章-Linux环境搭建-安装VMware虚拟机

    本人菜鸟一个,刚毕业才上班2个月,现在用到Linux部署项目,这才开始学习Linux,以下是我在安装Linxu系统是遇到的一些问题,希望能给广大菜鸟们在学习的道路上提供帮助和指导,废话不多说!开工! ...

随机推荐

  1. C#-02 传入参数的一些用法2

    C#_02 参数应用2 一.关于 "ref" 局部变量和 "ref" 返回 在前面已经明白了 ref 关键词传递一个对象引用给方法调用,这样在方法中对对象修改过 ...

  2. 洛谷P3243 [HNOI2015]菜肴制作 (拓扑排序/贪心)

    这道题的贪心思路可真是很难证明啊...... 对于<i,j>的限制(i必须在j之前),容易想到topsort,每次在入度为0的点中选取最小的.但这种正向找是错误的,题目要求的是小的节点尽量 ...

  3. 解决在JS中阻止定时器“重复”开启问题、Vue中定时器的使用

    1.问题描述 在一些需求开发中.需要设定软件提供服务的时间段(营业时间).这时可以选择定时器来实现.可以选择让定时器每隔一段时间检测当前时间是否在服务时间.到达服务时间.进入服务状态.未到服务时间.进 ...

  4. HTML+CSS基础知识(4)简单的广告界面

    文章目录 1.网页实例 1.1 代码 1.2 测试效果 1.网页实例 1.1 代码 css样式 /* 清除页面样式 */ *{ margin:0; padding: 0; } /* 统一页面的样式 * ...

  5. 如何在IDEA中创建Module、以及怎样在IDEA中删除Module?

    文章目录 1.为何要使用Module? 2.Module的创建 3.如何从硬盘上删除module 1.为何要使用Module? 目前主流的大型项目都是分布式部署的,结构类型这种多Module结构.不同 ...

  6. SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截

    项目依赖 SpringBoot 2.5.5 SpringCloud 2020.0.4 Alibaba Spring Cloud 2021.1 Mybatis Plus 3.4.0 Seata 1.4. ...

  7. Redis Cluster 原理说的头头是道,这些配置不懂就是纸上谈兵

    Redis Cluster 原理说的头头是道,这些配置不懂就是纸上谈兵 Redis Cluster 集群相关配置,使用集群方式的你必须重视和知晓.别嘴上原理说的头头是道,而集群有哪些配置?如何配置让集 ...

  8. C#中ref和out关键字的应用以及区别(参数修饰符)

    ref ref的定义 ref是reference的缩写,通过引用来传递参数的地址,ref基本上是服务于值类型的 ref的使用 //不使用 ref; void Method(int myRefInt) ...

  9. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)-L Bit Sequence

    题意 给你两个数l,m,大小为m的数组a,求[0,l]之间满足以下条件的数x的个数: 对于任何i输入[0,m-1],f(x+i)%2=a[i]:f(k):代表k在二进制下1的个数 m的范围<=1 ...

  10. C#在Xp系统执行.exe程序的报错怎么查看原因

    我的电脑---->管理---->事件查看器----->应用程序,查看错误来源