Linux分配的初始stack是多少,Linux系统初始

一、进程、线程、协程

1、进程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。

广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。

直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。

进程拥有代码和打开的文件资源、数据资源、独立的内存空间。

2、线程

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows7的线程,进行混合调度。

同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

一个进程可以有很多线程,每条线程并行执行不同的任务。

在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。

线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。

线程拥有自己的栈空间。

3、协程

协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。

一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。我们知道多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。

最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

二、linux常用命令

1、获取帮助的命令

file :获取命令遵循特定格式规范。(x86-64)![在这里插入图片描述](https://img-blog.csdnimg.cn/20200707105156702.png)

type :判断命令是否是内部命令

38f79fbfbf55332fd75ace0917d759f2.png

help :获取内部命令帮助,例如help pwdb2caf5f24738cb75dd6a895cfe436ace.png

–help,例如ls --help

845934d06c7bc180a8645ca2ee169b4e.png

一条命令可有多个man入口,whatis命令可查看某命令在man 文档下的入口,例如whatis cd、whatis ls等

2811d44745a1a639ccf8deca4c5636b9.png

1用户指令 2系统 3程序库 4设备

5文件系统 6游戏 7杂项 8系统指令

9内核指令

man命令,例如man 1 ls、man 1 passwd等1fad94dcb1d6591a7d55d5ad40751405.png

info :在线帮助,例如info rm8ebfc9466a11ec3f7319e1be46216bbe.png

2、历史命令:history

1、为什么保存历史命令?

方便命令操作,方便查看系统上执行过的命令,当发生错误是,可以查看自己执行过什么命令,从而知道错误的原因

2、查看历史命令 #hello

0c3e369bc69bc5fd40d43fcef9ecbef3.png

…历史命令将保存在用户家目录下的 .bash_history 文件中:

[root@localhost ~]# vim .bash_history

…不同用户拥有独立的历史命令

…历史命令默认不会立即写入文件,当bash程序退出时,写入文件

…保持历史命令存在安全隐患,系统默认保存1000条历史命令

#echo $HISTSIZE 改命令可查看历史命令保存条数,我的是修改过的,所以显示为500,如图

a5ddecddcfeb3abe404a63aae8a7d3f1.png

3、修改历史命令保存条数

临时修改历史命令保存条数可直接输入命令#HISTSIZE=500,即将历史命令保存条数修改为500条,改命令不会被保存;

永久性修改命令条数 #vim /etc/profile ,然后在打开的页面里修改215917e7f1dff02c25c77c73dfa6d20b.png

然后esc键,:wq 回车,我修改为50,然后输入 # source /etc/profile ,加载更改后的文件 ,然后重启虚拟机,输入# echo $HISTSIZE 293269b20945567681801b989f8b733a.png

4、如何给历史命令添加时间

和修改历史保存命令条数的步骤是一样的

先# vim /etc/profile ,然后输入HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "然后

# source /etc/profile

86c502d50315e24e5b6dbd359fbb04aa.png

输入命令#history,如下图即修改完毕

50dbd55fd0ad32549f0d653f84ad21b5.png

三、vim编辑器

vim编辑器:命令模式、输入模式、末行模式

1、命令模式(command mode)—执行命令

在该模式中,可以输入命令来执行许多种功能。控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

2、输入模式(Insert mode)—输入文本

vi被运行时,通常处在命令模式下,键入以下命令 可以使vi退出命令模式,进入输入模式:I(i)、A(a)、O(o)。

3、末行模式(last line mode)—执行待定命令

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。不过一般我们在使用时把vi简化成两个模式,就是将末行模式(last line mode)也算入命令行模式command mode)。

4、 vim的启动

输入vim命令后,便进入全屏幕编辑环境,此时的状态为命令模式。

(1) vim

进入vi的一个临时缓冲区,光标定位在该缓冲区第1行第1列的位置上

(2) vim file1

如果file1文件不存在,将建立此文件;如该文件存在,则将其拷贝到一个临时缓冲区。光标定位在该缓冲区第1行第1列的位置上。

5、 退出vim(末行模式(last line mode))

在退出vi前,先按ESC键,以确保当前vi的状态为命令方式,然后再键入“:”(冒号),输入下列命令,退出vi。

(1) :w

将编辑缓冲区的内容写入文件,则新的内容就替代了原始文件。这时并没有退出vi,必须进一步输入下述命令才能退出vi:

:w filename(存入指定文件)

:q

(2) :wq

即将上面的两步操作可以合成一步来完成,先执行w,后执行q。3、在文件中移动光标

6、在文件中移动光标

h:向左移动一个字符

l:向右移动一个字符

j:向下移动一行

k:向上移动一行

^(即Shift+6):移动到当前行的开头处

$(即Shift+4):移动到当前行的结尾处

H(大写):使光标移动到屏幕的顶部

M(大写):使光标移动到屏幕的中间

L(大写):使光标移动到屏幕的底部

Ctrl+b:上滚一屏。

Ctrl+f:下滚一屏。

Ctrl+d:下滚半屏。

Ctrl+u: 上滚半屏。

7、撤消更改

(1)撤消前一个命令:在最后一个命令之后立即输入u来撤消该命令

(2)重复某个命令:“.”

(3)撤消对一行的更改:输入U来撤消你对一行所做的所有更改,这个命令只有在你没将光标移动到该行以外时才生效。

8、删除文本

(1)删除一个字符:

●为删除一个字符,需将光标放置在要删除的字符上并输入x

●为删除光标之前(其左边)的一个字符,需输入X

(2)删除一个词或词的部分内容:

●为删除一个词,需将光标放置到该词的开头并输入dw

●为删除词的部分内容,需将光标放置到该词要保存部分的右边。输入dw来删除该词余下的部分

(3)删除一行:将光标放置到该行的任意处并输入dd

(4)删除多行:ndd

(5)删除行的部分内容:将光标放置到该行要保存部分的右边,并输入D。为删除光标左边的所有内容,须将光标放置到该行要删除部分的右边,并输入d0(d-零)。

(6)删除到文件的结尾:为删除从当前行到文件结尾的所有内容,需输入dG

9、复制和移动文本

●复制一行命令:yy

●粘贴命令:p

●移动文本:先将要移动的部分用删除命令删除,然后再粘贴就可以了

●复制指定文件的内容  : r filename

10、查找一个字符串

●输入/,并在/后面输入要查找的串,然后按下回车

●输入“n”跳转到该串的下一个出现处

●输入“N”跳转到该串的上一个出现处

11、替换一个字符串

●在一行内替换头一个字符串abc为新的字符串new   /abc/new

●在一行内替换所有的字符串abc为新的字符串new   /abc/new/g

●在两行内替换所有的字符串abc为新的字符串new   :#,#s/abc/new/g

●在文件内替换所有的字符串abc为新的字符串new   :%s/abc/new/g

●进行全文替换时询问用户确认每个替换需添加c选项   :%s/abc/new/gc

12、设置vim

●显示行号   :set number

●取消行号显示   :set nonumber

●设置显示用户模式   :set showmode

●设置文件只读   :set readonly

四、shell

1、什么是shell

shell是命令解释器,其程序存在于用户空间,是人机交互的屏障,对内核起到保护作用。

2、常见的shell种类

sh:

bash:

ksh:

csh:

大多数linux发行版默认为shell类型

3、bash命令的特点

(1)命令补全(即可用Tab命令补全)

按照环境变量PATH定义的路径查找命名:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

(2)路径补全(即可用Tab键补全路径)

在当前显示的路径下查找目录:

[root@localhost.localdomain ~]# cd /etc/sysconfig/network-scripts

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值