Xinspace


  • 首页

  • 归档

  • 搜索

No Logout option in Fedora in GNOME

发表于 2014-01-23 | 分类于 Others

In Fedora 20 , GNOME3 has changed how the user menu works. One change is that there is no Logout option in your menu options.

Basically, this change is based on this:

if you only have one user set up on a system, and only have one Desktop environment installed (i.e. just GNOME) then the logout option is not shown.

阅读全文 »

linux下安装gcc和g++

发表于 2014-01-21 | 分类于 Others

记得gcc编译器有一个命令g++可以编译c++(cpp),但是使用的时候提示找不到g++这个命令,而我的gcc又是安装了的,因此便习惯性的输入命令:sudo yum install g++,结果悲崔的提示找不到g++。郁闷了一番,还是google解决了。

原来,g++是gcc编译c++文件时提供的一个命令而已,但是在安装这个package的时候不能写g++,因为这不是包名,正确的包名是gcc-c++,所以命令应该为:

sudo yum install gcc-c++ libstdc++-devel

后面的是标准c++的相关库,一并安装上。执行命令后就就能够正确安装了。

OpenGL中window(窗口)、viewport(视口)和裁剪区域

发表于 2013-12-12 | 分类于 Programming

最近在学OpenGL,是个新手。在看蓝宝书的时候,发现上面解释的窗口、视口和剪裁区域有些难以理解(因为之前没有学习过计算机图形学或者MFC等GDI编程,所以对这些概念不好理解)。在谷歌上也搜过,发现有很多人解释这些词,不过还有些模糊。经过一段时间的郁闷与纠结,逐渐的了解了这些概念(不保证完全正确,只代表本人的观点,如有不对,请发邮件批评指正)。

之所以有这些概念,是因为图形的坐标需要转换。我们先以2维坐标系为例,3维的是一个道理,只不过加了一个z轴而已。

1.直角坐标系:是由两条相互垂直的轴确定了一个2维平面。你想要画的任何图形必须在这个坐标系中表示出来,也就是说图形中的每个点都必须有个坐标,这个比较容易理解。直角坐标系只是一个逻辑上的坐标系,也就是说这个坐标系是你自己想出来的,比如你自己想的这个直角坐标系的原点(0,0)在显示屏的左下角,向右为x轴正方向,向上为y轴正方向,又比如你自己想的这个坐标系的原点(0,0)位于显示屏的中间,向右为x轴正方向,向左为其负方向,向上为y轴正方向,向下为其负方向等等。这个坐标系只是你自己想出来的,假设你在这个直角坐标系中画了2个点,坐标为(1,0)和(100,100),你画的这两个点只是在你想的这个坐标系中而已,如果你要打印显示屏的话,这些点可能和你想象中的位置不一样,原因很简单,可能显示屏的坐标系与你自己想的这个坐标系不重合。比如你自己想的坐标系的原点是位于显示屏的左下角,而屏幕的坐标系(这个坐标系是由某些标准规定的,我这里只是随便举个例子)的原点位于显示屏的中间(假设在你想的坐标系中,显示屏的中间点的坐标为(300, 200),就是说屏幕宽600像素,高400像素),这时你画的两个点(1,0)和(100,100)在两个坐标系中表现的完全不一样。由此,可以得到两个概念,一个是显示屏的坐标系,即所说的设备坐标系;另一个是你自己想的坐标系,即逻辑坐标系。

2.裁剪区域:在上一步的逻辑坐标中,我们画了2个点(1,0)(100,100),但是,这个点只是出现在我们的逻辑坐标中,并不一定会出现在我们的设备坐标中,也就是说不一定会显示在我们的屏幕上。那么,我们怎么保证我们再逻辑坐标中画的图形能够显示到设备坐标中呢?这就让剪裁区域派上用场了。剪裁区域是处于逻辑坐标中的一个矩形区域,这个矩形区域可以自己设置大小,在这个矩形区域出现的任何图形都会被映射到设备坐标中,即你能在屏幕上看到这些图形,而在这个矩形区域之外的图形,不能够被映射到设备坐标中,当然就无法从屏幕上看到这些图形。举例来说,你自己设置的剪裁区域的左下角坐标为(0,0),右上角坐标为(50,50),也就是说这个剪裁区域宽50像素,高50像素,那么第一个点(1,0)处于这个剪裁区域内,而第二个点(100,100)在这个剪裁区域外,因此,第一个点能够从逻辑坐标系映射到设备坐标系中,在屏幕上显示出来,而第二个点不能被映射,也就不能被显示。所以,我们要把想要别人看到的图形放入到裁剪区域中,不想让别人看到的图形放到剪裁区域之外。剪裁区域的大小是自己设置的,不可能任何时候都和整个显示屏窗口一样大小。

3.视口:视口(viewport),作用就是把剪裁区域中的图形的坐标映射到设备坐标,使得转换后的图形能够看起来和在你想象的逻辑坐标系中位置、比例等等相同。视口也可以定义,可以定义为和整个显示屏的窗口一样大,也可以定义的和剪裁区域一样大,也可以设置的很小很小。当视口被定义为何窗口一样大时,你可以理解为剪裁区域内的图形被全屏放到了屏幕上;当定义的和剪裁区域一样大时,你可以理解为图形直接被原样大小的从剪裁区域映射到了相同大小的屏幕区域内而已。

4.窗口:窗口就是显示屏的整个屏幕了,这个没有必要解释太多了。

虚拟内存空间、虚拟地址空间和MMU映射(内存分页机制)

发表于 2013-09-08 | 分类于 Others

其实,这两者之前几乎没有什么关系。

虚拟内存空间:

在计算机早期,程序都是比较小的,所以128M的内存能够装下整个程序,进而执行(程序必须放在内存中才能被CPU执行)。然而,随着计算机的发展,程序增长的速度超越了内存增大的速度,因此出现了一个2-3G的程序而只有1G内存的现状。这时,如果要运行这个大程序,按照原来的想法就行不通了,因为整个内存才1G,而程序有2-3G的大小,远远超出了内存的容量,因此CPU就不能够执行这个程序。

为解决这个问题,人们就想出了虚拟内存空间的办法。由于内存容量不够大,而磁盘(也称硬盘)的容量很大,所以干脆就把磁盘的一部分拿出来作为内存交换区或缓冲区等。这样,当运行一个大于内存容量的程序的时候,可以把该程序暂时没有被执行到的代码和数据放到硬盘的缓冲区或交换区中,而把要执行的代码和数据放到真正的内存中去,这样就解决了上面的问题。所以可以简单的认为,内存和硬盘上的缓冲区或交换区组成了虚拟内存,它欺骗了系统,让系统以为整个程序都被放到了内存中。

 

虚拟地址空间:

计算机有了进程的概念后,就需要让每个进程占用一定的内存空间(因为内核会快速切换进程,以保证多任务,即让人们错以为同一时刻系统运行了很多程序)。但是,内存空间是有限的,而计算机的进程可以无限多,如何让每个进程之间能够相对独立呢?这样就出现了虚拟地址空间。

32位的内核让每个进程都拥有一个4G大小的虚拟地址空间,其中0-3G的空间为用户空间,用户代码可以直接访问,而3G-4G的虚拟空间为内核空间,用户不能直接访问,只能通过中断或系统调用进入内核空间。MMU(内存管理单元)会把虚拟内存地址映射到真实的物理地址。这样程序中可以随意的在这4G虚拟地址空间中进行操作,而具体占用了哪个真实的物理地址则不必关心,使得开发者能够专注于解决问题而不是操作内存。同时,这样也保证了一个进程不会占用另一个进程的物理空间(因为映射物理空间是由MMU来完成的,它知道哪些物理空间可以用,哪些是已经被占用的),提高了系统安全性。

 

所以,从以上解释可以看出,虚拟地址空间和虚拟内存空间几乎没有关系。

 

MMU映射和内存分页机制

MMU负责将虚拟地址空间映射到具体的真实物理地址空间,那么它是如何完成的呢?

当一个进程请求MMU提供内存映射时,会给出一个32位的值(可以认为是虚拟地址空间),这32位构成了MMU的线性地址空间。MMU的线性地址空间分为页目录索引(占10位)、页表索引(占10位)和偏移量(占12位)。页目录是一个指向页表的指针数组,页表是一个指向内存页面的指针数组,所以一个页目录就能够确定一个页表,继而确定一个内存页面,然后根据偏移量得到这个页面中的某个物理地址,这就完成了从虚拟地址空间映射到真实物理地址空间。也就是说,当有一个进程有内存地址访问时,MMU会根据访问地址的最高10位(即页目录索引)中找到对应的页表基地址,再从次高10位(即页表索引)中找到对应的页首基地址,然后根据最后12位(即偏移量)与页首基地址找到逻辑地址对应的真正的物理地址。

在内核层面,每个虚拟地址(逻辑地址)和物理地址(真实地址)都被划分为固定大小的页面(内存分页),每个合法的逻辑页面都处于一个真实页面中,方便MMU进行转换。

VirtualBox实现主机与虚拟机互通

发表于 2013-09-07 | 分类于 Others

首先要普及一下关于virtualbox的知识,网上也有很多讲解的,我这里大概说一下。

VirtualBox的提供了四种网络接入模式,它们分别是:
1、NAT 网络地址转换模式(NAT,Network Address Translation)
2、Bridged Adapter 桥接模式
3、Internal 内部网络模式
4、Host-only Adapter 主机模式

1.NAT(网络地址转换模式)

NAT模式是最简单的实现虚拟机上网的方式,你可以这样理解:虚拟主机访问网络的所有数据都是由主机提供的,虚拟主机并不真实存在于网络中(即虚拟主机没有真正的IP地址),主机与网络中的任何机器都不能查看和访问到虚拟主机。

虚拟机与主机关系:
只能单向访问,虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机。
虚拟机与网络中其他主机的关系:
只能单向访问,虚拟机可以访问到网络中其他主机,其他主机不能通过网络访问到虚拟机。
虚拟机与虚拟机之间的关系:
相互不能访问,虚拟机与虚拟机各自完全独立,相互间无法通过网络访问彼此。

 

2、Bridged Adapter 桥接模式

桥接模式的模拟度是相当完美。你可以这样理解,它是通过主机网卡,架设了一条桥,直接连入到网络中了。因此,它使得虚拟机能被分配到一个网络中独立的IP,所有网络功能完全和在网络中的真实机器一样。
虚拟机与主机关系: 模拟度也是相当完美。你可以这样理解,它是通过主机网卡,架设了一条桥,直接连入到网络中了。因此,它使得虚拟机能被分配到一个网络中独立的IP,所有网络功能完全和在网络中的真实机器一样。
虚拟机与主机关系:
可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。
虚拟机于网络中其他主机关系:
可以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。
虚拟机于虚拟机关系:
可以相互访问,原因同上。

阅读全文 »

fedora 删除旧内核(Delete old kernel on fedora)

发表于 2013-09-04 | 分类于 Others

fedora updates so fast that we have to remove some old kernels.

The kernels are in the /boot directory.

fllow the commands:

Command:$rpm -qa | grep kernel look at the kernels on fedora

Command:$uname -r look at the kernel we currently use

If there are two or more kernels on fedora, we should remove the others except the currently one.

Command:$sudo yum remove kernle-3.9……….. remove the other kernels.

I do not recommend you use the Command:$sudo rpm -e …….. , for the rpm -e just remove the old kernels, however the yum remove will not only remove the old kernels but also modifed the start-up action.

fedora19 GNOME3 显示Logout菜单

发表于 2013-08-10 | 分类于 Others

fedora19出来之后,就下来试了一下,感觉还不错。就是在用户面板里没有Logout菜单项。

这可难为了,如果想要注销的话,直接打开shell输入logout是不可以的,因为你打开的这个shell并不是你的登陆shell,不能够执行注销命令。因此,我们必须把这个菜单项调出来,方便我们随时注销。这里的注销是回到了你原始的登陆界面(如果你以文本模式登录,那么就回到了文本模式;同样如果你是图形模式登录,那么就回到图形模式)。

在网上好多人都说可以安装gnome shell 的扩展插件,但是普遍说这些插件可能导致gnome shell的崩溃,有些麻烦。还有一种办法。

打开终端,输入命令:

gsettings set org.gnome.shell always-show-log-out true

然后按下alt+F2,系统就会自动注销,再登录的时候就发现用户面板里面出现了Logout菜单项了。

注意如果是笔记本的话,可能要配合Fn键,即按下Fn+alt+F2.

Delete a file to Trash in bash shell in linux

发表于 2013-07-31 | 分类于 Others

Recently I did a stupid thing that using the command “rm -rf ./files/I/want/to/use” in fedora, so terrible and the data is hard to recovery.

I start alias the rm command in ~/.bashrc file with “alias rm=’mv $file /dev/null’”, but it cannot work and the error message is “cannot overwrite non-directory ‘/dev/null’ with directory ‘Item/“”, so I try to find out where the trash can is in the linux filesystem.

And then, I know the trash can is in the directory “/home/user/.local/share/Trash/files/“, whatever you delete in GUI, the files are in the trash can.So how do we delete files into trash can in command line?

There is a trash command line interface that you can use. To install do:

RPM:

sudo yum install trash-cli

DEBIN

sudo apt-get install trash-cli

Then trash files do:

trash files/you/want/to/move/to/trash

And you can find the files you trash in /home/user/.local/share/files/

You also can use trash-list, trash-empty……., and “man trash” to know more……

 

reference material:http://stackoverflow.com/questions/13532136/how-to-delete-a-file-to-the-trash-in-bash-linux

CPU的外频与倍频以及超频的含义

发表于 2013-07-27 | 分类于 Others

众所周知,CPU有外频和倍频,还有主频等等,有时还听说CPU可以超频工作,这些词汇是什么意思呢?

任何的电子器件都必须有一定的工作频率,这个频率相当于心跳,电子器件以这个频率为准来计算指令周期,简单说就是电子器件在一秒钟之内能够工作多少次的意思。CPU也是电子器件,所以CPU也具有频率。比如说intel的Core 2 Duo型号E8400的CPU频率为3.0GHz,表示这个CPU在一秒之内能够进行3.0×10^9次工作,每次工作可以进行一些指令,完成某些操作等等。

了解了频率,我们再来说一下外频吧。

一台计算机必须要有输入、输出设备,存储设备、运算设备和控制设备五部分组成,其中运算设备和控制设备被整合在CPU中,存储设备一般是内存,也叫做主存,输入设备一般为键盘鼠标,输出设备一般为显示屏和打印机等。未来完成一整套工作,比如说我们输入一份文档,再打印出来这一套动作,就需要这五部分协调工作,这就需要CPU与其他三部分(存储设备,输入输出设备)进行联系。在intel的x86架构的主板上大家可以明显看到,CPU与内存和显卡等是用北桥连接的,速度较快,而CPU与IO设备(网卡,键盘,鼠标,打印机等)是用南桥连接的,速度较慢。而南桥与北桥上的频率就可以称为CPU的外频,即CPU与外部设备进行通信的频率。

一般来讲,一个主板上的CPU与内存等的外频一致是最好的,大家的频率一致,工作起来就很顺畅。就像一条流水线,如果你工作的过快或者过慢,都会导致你前面或者后面的人有一堆工作做不完,而如果大家工作速度都差不多的话,整条流水线看起来就顺畅的多。这就告诉我们,在自己组装电脑的时候,千万不要什么都买最好的,重要的是看各个组件的外频是否一致,特别是CPU与内存的外频。如果CPU的外频比内存高很多,那么内存就成了整台电脑性能的瓶颈。

有了外频,那倍频和主频是什么意思呢?

CPU如果只靠外频来工作的话,那么工作效率肯定很差,因为整台计算机的几乎所有工作都必须经过CPU的处理才能实现,比如计算机的加减乘除,计算机屏幕的显示,打印数据,浏览网页等等都会要CPU进行相应的运算才行。这就要求CPU要比其他组件工作的更快才行。打个比方,如果我们要浏览网页,首先就是打开浏览器,而这需要CPU把相应浏览器的程序放到内存中,然后浏览器才能顺利打开,打开一个网页的时候,CPU需要经过一定的运算才能获得网页上的图片和文字,CPU再经过处理才能把这些文字和图片显示到屏幕上。如果CPU一直使用外频来工作的话,假如内存每一秒钟运行一条指令,而CPU也是这个频率,那么当浏览器程序已经全部放到内存中的时候,CPU还没有下载完网页的图片和文字,但是现实生活中不是这样的,你一点开浏览器,网页的内容立马就可以现实出来了(如果你不是这样的话,说明你的网速太慢了),这就要求CPU的运算速度必须比内存快才行,也就是说CPU的频率要比内存的频率快很多才行。

这样就有了疑惑了,上面提到CPU与内存的外频一致是做好的,而现在又说CPU的频率比内存的频率要快很多才行,这是怎么一回事?

可以看到,一个是CPU的外频,一个是CPU的频率(也可以称为主频)。外频是与外界通信的频率,大家一致当然最好,而主频是自己一个人的时候的工作频率,当然越快越好,所以外频和主频之间肯定有一定的关系,这个关系就是倍频啦。即CPU的主频=外频×倍频。假如CPU对外通信的频率3.33MHz,这说明CPU和内存之间一秒钟可以通信3.33×10^6次,够快吧。而CPU为了提升运算速度,必须提高自己的主频,所以在CPU与外部通信结束后,在内部进行运算的时候就要用到主频了。

到这里,我们就清楚了,外频是与外部进行通信的频率,最好与内存等组件的外频一致;而主频是CPU内部自己进行运算时候的频率,这个频率必须要高的多,才能保证整个计算机的性能;而主频与外频之间的倍数就成为倍频,比如一款CPU的外频为333MHz,而其主频为3.0GHz,所以倍频就是9倍(3.0G=333M×9)。

而所谓的超频就是让CPU在高频率下工作,也就是说通过超频调整CPU的主频,让CPU的主频更高,从而提升整体的性能。在CPU出厂的时候,倍频一般是被厂家锁定了,不能修改的,所以超频一般指的是超外频,也就是说提高CPU的外频。前面讲到,提升外频会影响CPU与其他组件的通信,所以超频不一定会提高计算机的整体性能,有时候可能会让计算机速度变得更慢更甚者会死机等。超频会让CPU工作在高负荷状态下,CPU会累的(呵呵),所以建议大家不要超频

介绍完了CPU的主频,外频,倍频及超频了,本文也就要结束了。如果还有不明白的地方,请留言探讨哈。

HTTP POST GET 方法的区别

发表于 2013-07-27 | 分类于 Others

最近在搞apache开发,所以不得不涉及到HTTP协议,其中提交请求有两种常用方法:POST和GET。这两种方法有什么区别呢?

HTTP协议定义了与服务器交互的四种方法:PUT,DELETE,GET,POST,分别对应增删查改。所以大家可以看到,GET是用来查资料,而POST则可以更改资料。比如留言板或者回帖等肯定是用的POST方法,因为这更改了这个页面的信息,而一般的浏览网页默认是用的GET方法。这是GET和POST方法最本质的区别。

然而,现实中很少有人按照HTTP规范去做,PUT和DELETE方法几乎没用到过,但是随着网络的发展,越来越多的人认识到规范的重要性,也慢慢开始支持这种规范了。

现在我们来看一下HTTP定义的GET和POST格式。

HTTP协议的请求格式:

request line

header

blank line

request body

第一行必须是request line,告诉服务器请求类型(GET或者POST),请求资源和HTTP的版本。紧接着下一行是首部,告诉浏览器一些附加信息,比如支持的字符编码是什么,代理是什么,使用的什么浏览器等等。首部后面一行必须是空行,再下一行是请求体,请求体一般用于POST方法。下面来举一下实际的例子。

阅读全文 »
1…121314…17

Xinspace

Personal blog from xin.

170 日志
6 分类
1 标签
© 2019 Xinspace
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4