0%

Linux

5. Linux启动流程

概括描述linux系统从开机到登陆界面的启动过程

1.开机BIOS自检

2.MBR引导

3.grub引导菜单

4.加载内核

5.启动init进程

6.读取inittab文件执行rc.sysinit、rc等脚本

7.启动mingetty进入系统登录界面

阅读全文 »

Linux

4. I/O

4.1 相关概念说明

4.1.1 用户空间与内核空间

现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为用户空间。

阅读全文 »

Linux

3. 线程

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

3.1 线程与进程的区别联系

进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。(包括程序段,相关数据段,和进程控制块PCB)
线程: 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

关系:一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列
区别:主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
优缺点:线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

阅读全文 »

Linux

2. 进程

2.1 进程概念

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配的一个独立单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等,然后该进程被放入到进程的就绪队列,进程调度程序选中它,为它分配CPU及其他相关资源,该进程就被运行起来。

阅读全文 »

Linux

操作系统的四个特征: 并发、共享、异步、虚拟

并发:指两个或多个事件在同一时间间隔内发生。在多道程序环境下,一段时间内,宏观上有多个程序在同时运行,而每一时刻,单处理器环境下仅能有一道程序执行,故微观上这些程序还是在分时地交替执行。操作系统的并发性是通过分时实现的。

共享:指系统中的资源可以被多个并发执行的程序共同使用,而不是被其中一个独占。资源共享有两种方式,互斥访问和同时访问。

异步:在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一管到底,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。异步性使得操作系统运行在一种随机的环境下,可能导致进程产生与时间有关的错误。但只要运行环境相同,操作系统必须保证多次运行程序,都获得相同的结果。

虚拟:虚拟性是一种管理技术,把物理上的一个实体变成逻辑上的一个或多个对应物。采用虚拟技术的目的是为用户提供易于使用、方便高效的操作环境。

阅读全文 »

在Linux上,通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

设置Cron任务

创建任务

可以通过如下指令来创建或者修改你自己的crontab文件,

1
crontab -e

设置运行周期

cron job是周期性运行的,我们按如下格式来进行设置,

1
2
3
4
5
6
7
8
* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

当然有更简单的方法,你可以在 https://crontab.guru/ 网站进行在线设置,设置好了直接拷贝过来。网页提供了图形化的操作界面,对新手特别友好。

Screen Shot 2019-11-22 at 10.20.04 PM.png

阅读全文 »

Github绑定域名需要完成以下两步

1. 域名解析

购买域名之后,设置CNAME记录指向github博客。比如在阿里云购买域名之后,直接增加一条CNAME记录指向 teckee.github.io即可

Screen Shot 2019-12-08 at 11.36.16 AM.png

阅读全文 »

ZooKeeper曾是Hadoop的正式子项目,后发展成为Apache顶级项目,与Hadoop密切相关但却没有任何依赖。它是一个针对大型应用提供高可用的数据管理、应用程序协调服务的分布式服务框架,基于对Zab算法的使用,使该框架保证了分布式环境中数据的强一致性,提供的功能包括:配置维护、统一命名服务、状态同步服务、集群管理等。

在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。

阅读全文 »

代码整洁是我们一直追求的目标,不仅仅是为了成为更好的程序员,而且也为了节省他人时间,减少阅读、维护代码的时间成本,提高工作效率。本文将从命名、函数风格、注释等不同方面对《Clean Code》中的内容进行总结。

阅读全文 »

Elasticsearch 是一个分布式的RESTful风格的搜索和数据分析工具,是当前流行的企业级搜索引擎。

基本概念

Cluster

集群通过独一无二的名称来进行区分,每个集群是由一个或者多个Node组成。不能在不同的环境中使用相同的cluster名,否则node可能错误地划分到某个cluster中。

Node

作为集群(cluster)的一部分,存储数据。

阅读全文 »