Linux

Linux下ELF文件的格式(3)

假装没事ソ 提交于 2021-02-18 04:28:44
【说明】本文章从本人的CSDN博客搬过来的,因个人感觉CSDN的博客系统太差,so,搬到这里。 在上一篇文章中,主要介绍了几个重要的段以及这几个段中存放的信息。这里将重点介绍目标文件中的 ELF文件头 和 段表(Section Header Table)。 关于ELF文件头,它主要包含了描述整个文件的基本属性,比如ELF文件版本,目标机器型号,程序入口地址等。 关于段表,它描述了ELF文件包含的所有段的信息,比如每个段的段名,长度,在文件中的偏移,读写权限以及其他的属性。 1.再看文件头 再来看整个头文件结构 那么对于系统来讲,这个结构是怎么存储的,按什么格式存储呢? 在 /user/include/elf.h 中,可以找到描述这个头文件的结构体,如下所示: 对比实际的内容跟这个结构体,发现从Type (e_type)开始往下是一一对应的,而前面几条信息就对应于 e_ident[16],即e_ident中存放着前几条的信息。 现在将几个重要的字段解释一下: e_type : ELF文件类型,主要有3种,ET_REL 可重定位,ET_EXEC可执行,ET_DYN共享目标文件,一般为.so文件 e_machine : 机器类型,如EM_386,intel的x86架构,EM_68K摩托罗拉的68000系列等 e_entry : 入口地址,可执行文件被加载后,会从这个虚拟地址开始执行指令

Linux下ELF文件的格式(4) -> 符号

雨燕双飞 提交于 2021-02-18 04:09:55
【说明】本文章从本人的CSDN博客搬过来的,因个人感觉CSDN的博客系统太差,so,搬到这里。 这篇主要说明【符号】这一概念。 那么首先从链接开始说起,源文件到可执行文件一般经过4个步骤,预处理,编译,汇编,链接。作为最后一个阶段,链接到底干什么了? 其实前面也说到了,链接就是将多个目标文件,链接成可执行文件。这样就得考虑一件事,假如我在led.c里定义一个变量led1,而我们要在test.c里使用这个变量。 根据前面几篇我们可以知道,led.c和test.c在汇编这一步,会变成led.o和test.o,并且变量led1的运行地址是不存在的,通常为0 。 而程序运行起来,肯定位于真实的地址上【这里的真实也是虚拟地址】,那么就得靠链接器来确定这些变量的真实地址。 同样,我们的外部函数也是需要确定的,通常这些统称为符号。 每一个目标文件都有一个符号表,这个表中记录了目标文件用到的所有符号,每个符号都有一个对应的值,对于变量和函数来讲,这个值就是他们的地址。 除此之外,还有特殊的符号。总的来讲,分为以下几类: 1.定义在本目标文件中的全局符号,可以被其他模块引用。如:function1,main,global_init等 2.定义在其他文件,被本目标引用的符号,也叫外部符号,如:printf等 3.段名,这是由编译器产生的,如.text .data 等,它的值就是该段的起始地址。 4

CPU、io、mem之间的关系

纵饮孤独 提交于 2021-02-18 04:08:00
https://blog.csdn.net/weixin_38250126/article/details/83412749 https://blog.csdn.net/joeyon1985/article/details/46682939 https://blog.csdn.net/u013144287/article/details/60964012 一、名词解释 CPU:工人,干活的,判断以及逻辑处理 内存:车间,工人干活的地方,车间中加工原料,当车间中没有原料了,在从仓库中取原料,对原料进行加工 内存本身有一定的存储空间,对内存中的数据进行处理的速度比从硬盘取数据再处理的速度快很多 硬盘:仓库,原料,数据存储 二、三者关系 CPU对数据进行判断以及逻辑处理,本身不能存储数据,这时cpu从内存取数据进行逻辑计算,如果内存没有数据,才会从硬盘读数据到内存,再对数据进行处理 就像人吃饭一样,cpu就是人,内存就是碗,硬盘就是饭锅! 当cpu进程等待,会造成内存开销的增加,内存不够用的时候会用到虚拟内存,导致虚拟内存的增加,这时磁盘IO开销就会增加,系统态sy%提升,cpu开销增加;内存里数据不够用,才用磁盘中取数据。 三、性能高因素 1、系统CPU利用率高是什么原因? 系统中断和切换频繁很耗用CPU,共享资源竞争,大量io交互。CPU太差,主频太低,都是形容 CPU差。

高并发解决方案

假装没事ソ 提交于 2021-02-18 04:03:31
一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单。随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的。   大型网站,比如门户网站,在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。这几个解决思路在一定程度上意味着更大的投入。 1、HTML静态化   其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。  

Linux 系统时间设置

纵饮孤独 提交于 2021-02-18 02:24:24
from:https://blog.csdn.net/yjh314/article/details/51669238 今早看到一台机器时间对不上,本以为系统时间与网络北京时间不同步,就在终端命令执行网络时间同步 [plain] view plain copy [root@localhost ~]# ntpdate time.windows.com 执行完之后,在执行终端命令,查看时间还是一样,其实EDT和CST是有区别的,时区不一样 EDT:指美国东部夏令时间,波士顿、纽约市、 华盛顿哥伦比亚特区 ,都在这个时区内,跟 北京时间 有12小时的时差,晚12小时。 CST:可以指下面两种: 1. 美国中部标准时间(西六区,-6:00),中国是东八区(+8:00),北京时间比美国中部标准时间早14个小时。3:45 PM CST 是北京时间凌晨1:45。 2. 中澳大利亚标准时间(+10:30),中国是东八区(+8:00),北京时间比中澳大利亚标准时间晚2个半小时。3:45 PM CST 是北京时间下午上午5:45。 那么现在只要改成北京时间的时区CST就可以了,修改如下: [plain] view plain copy [root@localhost ~]# mv /etc/localtime /etc/localtime.bak [root@localhost ~]# ln -s

MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群

a 夏天 提交于 2021-02-18 02:17:58
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装、客户端操作、安全认证、副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很大。特此记录,以备查看。 文章目录: MongoDB和Java(1):Linux下的MongoDB安装 MongoDB和Java(2):普通用户启动mongod进程 MongoDB和Java(3):Java操作MongoB MongoDB和Java(4):Spring Data整合MongoDB(XML配置) MongoDB和Java(5):Spring Data整合MongoDB(注解配置) MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群 MongoDB和Java(7):MongoDB用户管理 本文记录如何整合Spring data和MongoDB副本集、分片集群。 Java客户端这边的开发环境和《 MongoDB和Java(5):Spring Data整合MongoDB(注解配置) 》是一样的,实体类、数据层接口、测试类代码都不需要太多的改动,主要需要改的就是mongo的连接属性文件、MongoClient的创建方式。 源代码下载 MongoDB和Java学习代码.zip 1、副本集环境 主:10.10.13.195:27017 从:10

鸿蒙和安卓,到底有什么区别?

浪子不回头ぞ 提交于 2021-02-18 01:54:15
来自: 程序员小枫 在 9 月 10 日召开的华为开发者大会上,宣布了鸿蒙2.0 系统正式面世,同时开启了 Beta 版本的测试和开源网站。 对于开发者来说两个最关键的点值得关注: 一个是 Beta 版的开发工具,一个是开源网站。 开源网站 在开发者大会上宣布将 HarmonyOS源代码捐赠给中国开放原子开源基金会,并在大会上公布了鸿蒙系统的开源路线。 OpenHarmony 官方源码地址: https: //openharmony.gitee.com/openharmony 开发工具 鸿蒙使用基于 Intellij IDEA 深度定制研发的 DevEco Studio 作为其开发工具。 DevEco Studio 下载地址: https: / /developer.harmonyos.com/cn /develop/deveco -studio 那么,在应用开发过程中,HarmonyOS(鸿蒙)和 Android(安卓)开发环境有什么不同呐? HarmonyOS 项目和 Android 项目对比 资源目录的变更 ①资源目录名称有更改 安卓 res 目录,这里用 resources 目录,它包括 base 和 rawfile 两部分,其中 base 是核心的资源目录,常用的都放在这里面,便于查找和使用。rawfile 会原封不动打包到生成的应用里面。 安卓是 res/values

Fedora 30 正式版发布:引入 Deepin 桌面环境(DDE)

纵饮孤独 提交于 2021-02-18 01:49:19
Fedora 是一个由 Red Hat 赞助、Fedora 项目社区支持的独立 Linux 发行版。 4月底, Fedora 30正式发布,Fedora 30与 Fedora 29 相比,还是发生了不少的变化。值得高兴的是,在Fedora30这一版本中引入了 Deepin 桌面环境(DDE), 以后可以选择 DeepinDE 体验 Fedora了。 还有哪些变化,赶快看看吧! 版本/变体 Fedora 拥有诸多版本(Editions),分别契合不同的特定应用场景。这一概念起始于 Fedora 21 版本,社区的需求在此后一直不断变化。在 Fedora 30 中,Fedora Server 版本针对云及服务器的应用场景。关注于容器的 Fedora Atomic Host 版本由 Fedora CoreOS 替代。Fedora Workstation 版本仍旧致力于带来最新的开源的桌面工具。 除了这些 editions 之外,Fedora 项目还通过 Spins(提供替代的桌面环境)和 Labs(特定领域的软件集合)覆盖了更多的不同需求或应用场景,其中也包含适用于 IoT 场景的版本。Feodra 也未曾忘记对其它架构的支持——在常用指令集架构之外,Fedora 还支持 ARM AArch64、Power 及 S390x。 变化 此版本的 Fedora Workstation(工作站

答好友困惑:Java零基础如何入门,不知道怎么学,迷茫ING

匆匆过客 提交于 2021-02-18 00:56:54
作者:程序员小跃 几个星期之前,我在知乎上看到一个提问,说是: 对于完全没有经验零基础自身的数学底子也很弱学习Java应该怎么学习呢 ?想着类似的问题我也有过回答,并且反馈还是蛮好的,就参考之前的思路回答了一遍,可惜没在公众号里和大家分享,后续再整理一份好好分享下。( 该问答地址见原文 ) 提出问题的是一位高中生,就顺藤摸瓜加了我好友,让我给指点指点。跃哥最近飘了,各种给人指点,也不知道是对是错,但是我还是从自身的角度来分析问题,毕竟我也工作多年,给初学者一些信心是我该做的;给初学者一些指导,是我力所能及的;给初学者一些劝退,也是我要做的,毕竟很多人可能最后发现自己并不适合写程序。 期间这位老弟和我聊了很多,我都零零散散给了解答。直到前几天,他抛给我很多困惑,都是在初学的时候会面临到的,所以我就抽时间做了一次详细的解答,主要涉及到 Java从入门到进阶需要经历哪些 、 如何学习Java入门 、 还没开始实践就有一堆烦恼,该怎么办? 本文将以问答的方式,给出一些简单的见解,因为Java内容挺多的,可能会有遗漏,我已经让群里的小伙伴们做过一次筛选,读者朋友们看到了,也可以给我更多的补充噢。 知友:哥,我前两天也想了一些编程的问题向您请教请教吧,希望能得到你的帮助 第一个呢就是Java学习路线是什么,Java各个阶段需要学的知识点有什么,课程大纲