移植软件到64位系统

Linux是首个能用在64位处理器上的跨平台操作系统。64位系统在服务器和桌面领域非常常见。所以对于开发者来讲,如何让自己的软件能在32位、64位机上都能工作,是个需要重点考虑的问题。Linux系统使用LP64标准,即,除了指针和long整型是64位外,普通整型仍未32位。因此,对于C语言程序,要重点检查。

64位系统有啥好处,为啥一定要移植?32位系统在大型应用上,给开发者带来和很多挑战,如数据库。还有那些开发者需要尽可能从硬件中获得加速和好处的程序。另外,科学计算通常需要浮点算术,一些财经领域的计算要求比普通浮点计算更高的精确度,更小的置信区间。而64位机恰好能满足这些需求。另外一方面,32位的指针只能标示4G的虚拟存储空间,虽然现在Linux内核能支持大于4G的内存识别,但实际上每个程序可用的内存空间仍然只有4G,若想突破这个局限,要么增加软件的复杂度,性能下降,要么采用64位系统。 继续阅读

发表在 后端优化与处理器, 编译技术 | 标签为 , , , | 留下评论

M9系统独立自主-佩服j.wong-持消极态度

一直关注M9,几乎每天都会去魅族论坛逛逛,看看j.wong又爆了什么料。从M8做到M9,不容易。今天的料更大,M9要深度定制系统,摆脱Andorid,但会兼容Andorid的软件。佩服这位白手起家,敢想敢干的老总。

细数各个手机生产商,几乎都有在Andorid系统的基础上做修改。HTC的htc sense,三星也有自己的定制界面,摩托也有少量定制。但这些貌似都没有在原系统上大改。唯独国内各家,都在深度定制,移动的Ophone,联想lephone中的系统。虽然在努力独立自主,但都挺不容易的。且前途都不乐观。 继续阅读

发表在 IT产业, IT职业和生活 | 标签为 , , | 4 条评论

open64中的gcc前端

概述

open64的强项在后端优化,为了避免重新开发,使用了gcc的前端。编译器能发现的大部分错误在词法和语法分析中。所以使用gcc的前端,能让open64具备和gcc一样强大的查错功能。
Open64历史上使用过三个版本的gcc前端,gcc3.3, gcc4.0和gcc4.2. gcc3.3是open64目录下对应的kgccfe(gcc前端)和kg++fe(g++前端).现在几乎都使用最新的gcc4.2,前两个版本几乎已经废弃。所以将以gcc4.2前端为例介绍之。 继续阅读

发表在 前端和程序分析, 编译技术 | 标签为 , , , , , | 2 条评论

Linux内存管理中的分页

什么是分页

分页是操作系统中的内存管理机制。通过这种方式计算机可以为主存存取其他存储介质上的数据。在页存储管理机制中,OS从其他介质中得到相同大小的数据块,这种块即为页。 继续阅读

发表在 内存管理, 操作系统 | 标签为 , , , | 2 条评论

关于华为

  • 华为的研发

华为的研发体系总共有46000人,在全球有十几个研发机构。其中在国外的研发机构,本土化率达到80%。在国内,有北京研究所、上海研究所、南京研究所、西安研究所、成都研究所、杭州研究所、武汉研究所。侧重点各有不同,依次是数据通信和芯片、无线、业务软件、核心网、微波、公共平台、光网络。华为很注重知识产权保护,也就是专利的申请。

华为研发工程师分为8级,新入职的都从0级开始。做到一定程度之后,就可以在管理岗和技术岗之间选一条路来走。二者都是末位淘汰制,其中管理岗每年淘汰10%,技术岗3%。 继续阅读

发表在 IT产业, IT职业和生活 | 标签为 , | 留下评论

存储层次结构、cache、编译

先给出计算机存储层次结构一组数据:

存储层级 1 2 3 4
名称 寄存器 高速缓存(cache) 主存 硬盘
一般容量 <1KB <16M <512GB >1TB
实现技术 CMOS, CMOS/SRAM CMOS/DRAM 磁盘
访问时间(ns) 0.25-0.5 5-25 50-250 5000000
带宽 50000-500000 5000-20000 2500-10000 50-500
控制方式 编译器 硬件 操作系统 操作系统
备份方式 高速缓存 主存 硬盘 光盘/磁带

计算机使用TLB,L1 cache,L2 cache,虚存把虚拟地址空间映射为物理地址空间。接下来,我们看看计算机是如何做到的: 继续阅读

发表在 后端优化与处理器, 编译技术 | 标签为 , , , , , , | 一条评论