制作网站需要多少时间wordpress调用文章标签
制作网站需要多少时间,wordpress调用文章标签,网站开发和软件开发工作,页面设计的对称方法包括哪几种形式shell是什么#xff1f;
Shell的英语翻译是“壳”#xff0c;其作用也跟名字差不多#xff0c;为操作系统套个壳#xff0c;人与操作系统的壳交互。与壳相对应的则是操作系统内核#xff0c;一个“壳”一个“核”。核从1970年代开始就基本定型了#xff0c;没什么大的改…shell是什么
Shell的英语翻译是“壳”其作用也跟名字差不多为操作系统套个壳人与操作系统的壳交互。与壳相对应的则是操作系统内核一个“壳”一个“核”。核从1970年代开始就基本定型了没什么大的改变而壳则不断演变迭代已经跟当初的壳大不相同。核在70年代以后就没什么大发展的根本原因在于核是负责操控计算机硬件的从冯诺依曼结构以后计算机结构就没什么大的改变操作系统核心自然也没什么大改变。 在远古40年代真空管时期人与计算机的交互是通过传入程序打孔纸带也没有shell的概念如果硬要说shell的话可能负责装填打孔纸带的计算机管理员就是shell哈哈哈哈。 再后来50年代有了晶体管CPU速度高于IO出现了中断机制和调度程序并在60年代演变成操作系统人们需要与操作系统进行交互人们提出了shell的概念并在Multics操作系统Unix的前身中实现了出来称为Multics shell。 这个“人们”指的是路易斯·普赞 注意shell是操作系统中的一层是一个概念并不是指专门的一个工具实现了该功能的工具都可以称为shell。 后面Unix之父Thompson参考Multics shell实现了第一个Unix shellThompson shell
总而言之我们给shell下个定义就是shell是一种计算机程序它接受命令解释命令并将命令传递给操作系统进行处理。 注意终端terminal和shell不是一个概念二者也不是一个东西terminal是终端用于接受用户输入转变为指令序列并展示shell输出。他们之间的关系是terminal连接shellshell调用操作系统接口shell只负责执行指令输出结果并不保存过往结果。保存过往运行结果复制粘贴将组合快捷键转变成控制指令将箭头等输入转变成控制指令等功能都是由terminal负责的。为什么会有terminal因为在上古时期是真的有物理终端的物理意义上的terminal例如电传打字机(Teletype)shell只负责接受输入并处理。另外还有Console控制台的概念也是从上古时期物理控制台继承过来的在上古时期真的是有物理意义上的控制台的是比终端权限更高一级的与计算机交互的设备一般都在机房计算机本体上由计算机管理员负责。 随着计算机技术的进步PC的体积变得很小终端控制台合二为一都被融合到了PC里面现在 Console 与 Terminal 基本被看作是同义词。人们与电脑交互依旧是通过终端来进行早期终端称为文本终端只能显示文字后期的终端称为图形终端可以接受图像输入并输出图像这也是显示器和GUI的前身。后来随着科技发展终端被键盘和显示器取代。 再随着GUI的到来人们开始更多使用GUI交互【GUI也可以看作是Shell的一种实现】但是还是有一部分人有CLI命令行交互的需求。所以终端模拟器 terminal emulator出现了缩写tty【继承于打字机teletype】没错就是Linux中的ttyLinux默认有7个tty1~6是全屏终端7是图形化终端。注意现代的显示器是为GUI设计的即使是没有图形界面的终端也不过是终端模拟器模拟出来的罢了不过完全没有图形界面的全屏终端是由操作系统提供的而桌面系统中的terminal window是由专门的终端模拟器提供的例如gnome-terminal。不过目前大家已经不称terminal emulator而直接称terminal了。 当代Linux下的大致架构关于TTY的讲解可以看这里 再往后随着Linux和GNU的发展shell的发展就五花八门开枝散叶了。 开枝散叶遇见的一个问题就是如何统一如果不同shell实现的功能不同操作不同语法不同那还怎么玩这不光是Shell的问题操作系统也有这个问题Unix下的各种分支如果各自的操作系统调用各不相同还怎么玩这就引出了下面的POSIX。
POSIX是什么
可移植操作系统接口英语Portable Operating System Interface缩写为POSIX是IEEE为要在各种UNIX操作系统上运行软件而定义API的一系列互相关联的标准的总称其正式称呼为IEEE Std 1003而国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼RMS应IEEE的要求而提议的一个易于记忆的名称由POSI和X组成X则表明其对Unix API的传承。 当前的POSIX主要分为以下部分
核心服务兼容测试系统调用命令和工具其中就包括了对于shell的要求实时扩展包括优先级调度、实时信号、时钟和定时器、信号量、消息传递、共享内存、异步和同步 I/O、内存锁。线程扩展包括线程创建和控制、线程调度、线程同步、信号处理。 我们常见的IEEE标准是指由IEEE标准协会制定的标准IEEE标准协会(IEEE-SA)是电气和电子工程师协会IEEE下辖的标准制定机构其标准制定内容涵盖信息技术、通信、电力和能源等多个领域已制定了900多个现行工业标准另有400多项标准正在制定过程中。我见过的的IEEE标准有IEEE754浮点运算标准IEEE1003操作系统接口标准。 标准化是一个行业发展到一定程度的必然现象我们常见的ISOGBIEEE等标准的关系可以看这个回答 Linux大致是实现了POSIX的要求但是没有参加POSIX认证Linux自己的标准叫做LSB。
Bash vs Zsh vs fish
BashZshfish这几种都是shellBash是目前系统中常见的内置默认shellZsh相较于bash有一些改进可玩性更高搭配oh my zsh可以构造出更加适合自己的shellfish是05年才发布的shell主打一个开箱即用。bash主打简单通用zsh主打想用什么自己配fish主打默认就够好用弱化个人配置起到的影响。 需要注意的一点是不同的shell他们各自的配置文件是不同的所以在配置文件中配置的环境变量是不通用的有时候编译一些库或者工具的时候这些库会自动配置环境变量到当下的shell中。如果想要在zsh中使用bash的环境变量可以在.zshrc文件最后加上一行代码
source ~/.bashrc同理在bash下用zsh的环境变量就是
source ~/.zshrcLinux vs Unix
Unix是贝尔实验室开发的目前由Open Group持有商标所有通过Open Group认证的系统都可以称为Unix操作系统。 Linux最初是由Linus开发的后续转由社区进行开发Linus是主要的代码审核者Linux只是一个操作系统内核Linux中使用的配套软件有很大一部分是由GNU项目开发的。 Linux发行版本的发展分支 Unix发展分支
Linux的标准 vs Unix标准
Linux的标准是LSB以 POSIX 和 SUS 标准为基础并对其他领域例如图形中源代码的一些标准进行了扩充还增加了对二进制可执行文件格式规范的定义从而试图确保 Linux 上应用程序源码和二进制文件的兼容性目前最新的LSB标准是15年3月发布的5.0版本而15年Debin和Ubuntu已经宣布不支持LSB标准。 这都过去9年了也没见新的LSB版本是发生了什么吗 Unix的标准是POSIX和SUSSUS是POSIX的扩展在2001年后二者趋于一致只有经过SUS标准认证的系统才称为Unix。 相较于POSIXLSB还制定了制定了应用程序与运行环境之间的二进制接口基于以下的标准
Single UNIX SpecificationSUSSystem V Interface DefinitionSVIDcompilers for the Intel Itanium processorC ABISystem V Application Binary InterfaceABI
ABI应用程序二进制接口描述了应用程序和操作系统之间一个应用和它的库之间或者应用的组成部分之间的低接口。要理解ABI统一的重要性我们要从软件是如何跨平台说起。 一个软件在操作系统上运行经常会进行两种调用
编程语言库调用即调用标准库或第三方库一般库函数都是以lib文件头文件存储lib文件中包含了库函数实现头文件中包含了相应的接口。glibc 是 Linux 下使用的开源的标准 C 库它是 GNU 发布的 libc 库即运行时库。这些基本函数都是被标准化了的而且这些函数通常都是用汇编直接实现的。操作系统调用系统调用是通向操作系统本身的接口是面向底层硬件的。通过系统调用可以使得用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互是操作系统留给应用程序的一个接口。
跨平台两种程度
源码级跨平台即同一套源码可以在不同的平台上编译运行。二进制级跨平台即编译出来一套二进制代码可以在不同平台上运行。
二进制跨平台第一点需要的是可执行程序格式相同【虽然都是二进制文件但是其中一些附加信息还是不一样的】
WindowPE-COFFUnix/Linux Executable and Linkable Format (ELF)MacOSMACH-O
所以一般情况下对于MacOS和Window这俩兄弟和其他的基本不用考虑二进制跨平台但是对于Linux和Unix下可以尝试二进制跨平台。 第二点是需要ABI相同严格来说ABI并不是完全操作系统需要考虑的事情更多是编程语言需要考虑的事情只不过LSB把这件事情也写进了标准尽量做到在Linux的世界一次编译到处通用。 ABI的统一需要考虑非常多的内容对于C语言来说需要考虑 内置类型的存储方式字节大小字节序对齐方式等组合类型的存储方式内存分布等外部符号(external-linkage与用户定义的符号之间的命名方式和解析方式如函数名func在C语言的目标文件中是否被解析成外部符号_func。函数调用方式比如参数入栈顺序、返回值如何保持等。堆栈的分布方式比如参数和局部变量在堆栈里的位置参数传递方法等。寄存器使用约定函数调用时哪些寄存器可以修改哪些须要保存等等。 对于C要求则更多除上面的以外还需要考虑 继承类体系的内存分布如基类虚基类在继承类中的位置等。指向成员函数的指针( pointer-to-member的内存分布如何通过指向成员函数的- 指针来调用成员函数如何传递this 指针。如何调用虚函数vtable的内容和分布形式vtable指针在 object 中的位置等。template 如何实例化。外部符号的修饰。全局对象的构造和析构。异常的产生和捕获机制。标准库的细节问题RTTI 如何实现等。内嵌函数访问细节。 这些问题都是需要编译器考虑的而不是操作系统需要考虑的。ABI不统一的问题也不光体现在不能跨平台因为不同的编译器间的ABI都不统一甚至相同的编译器不同的版本ABI都不统一这会导致编译出来的库文件只能在对应的编译器版本下使用对于C主要的ABI有两种一种是微软自家的ABI另一种是Intel的Itanium C ABI二者不互通但是在LSB和System V ABI的限制下在Linux和Unix下基本已经统一了C的ABI但也只是基本统一。而且ABI的统一也并不代表可以完全进行二进制跨平台。 终于理清这几个概念之间的区别和联系了如果觉得有帮助欢迎点赞收藏关注thanks
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90998.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!