程序侷限性原因:
空間侷限性
時間侷限性
IO設備的部分:
設備控制器和設備本身
控制器:集成在主板上的一塊芯片或一組芯片
驅動程序:通常應該由設備生產商:位於內核中
每個控制器都有少量的用於通信的寄存器,每個寄存器表現爲一個I/O端口;
所有的寄存器組合成爲設備的IO地址空間;
實現輸入、輸出:
三種方式:
1、輪詢:忙等待
2、中斷:
內核處理中斷分爲兩步:
中斷上半部、中斷的下半部
3、DMA:
OS:
cpu:時間片,time slice
memory:虛擬地址空間
I/O:文件
進程
資源集
cpu事件
memory:抽象,虛擬地址空間(32bits:4G)
I/O:打開的多個文件,fd(file descriptor)
正常文件
設備文件
管道文件
進程:task
cpu虛擬化:
模擬:emulation
虛擬:virtulization
完全虛擬化(full-virtulization)
BT:二進制翻譯(軟件)
HVM:硬件輔助的虛擬化(硬件)
半虛擬化:
Memory:
進程:現行地址空間
內核:物理地址空間
MMU Virtulization
Inter:EPT,Extended Page Table
AMD:NTP,Nested Page Table
TLB virtulization
tagged TLB
I/O:
外存:
硬盤、光盤、U盤
網絡設備:
網卡
顯示設備:
VGA:frame buffer機制
鍵盤鼠標:
ps/2,usb
I/O虛擬化的方式:
模擬:完全使用軟件來模擬真實硬件
半虛擬化:
IO-through:IO透傳
Inter:VT-d
基於北橋的硬件輔助的虛擬化技術:
兩種實現方式:
Type-I:
xen,vmware ESX/ESXi
Type-II:
kvm,vmware,workstation,virtualbox
Inter硬件輔助的虛擬化:
CPU:vt-x,EPT,tagged-TLB
IO/CPU:vt-d,IOV,VMDq
第一類:跟處理器相關:vt-x
第二類:跟芯片相關:vt-d
第三類:跟IO相關:VMDq和SR-IOV
QEMU,virtio
虛擬化技術的分類
模擬:著名的模擬器,PearPC,Bochs,QEMU
完全虛擬化:也稱爲native virtulization
兩種加速方式:
BT
HVM
VMware Workstation,VMware Server,Parallels Desktop,KVM,Xen(HVM)
半虛擬化:para-virtualization
xen,uml(user-mod linux)
OS級別的虛擬化:
OpenVZ,lxc
Solaris Contaniners
FreeBSD jails
庫虛擬化:
wine,
應用程序虛擬化:
jvm
虛擬化網絡:
nat mode
bridge mode
routed mode
isolation mode
使用brctl的配置過程:
# brctl add br0
# brctl stp br0 on
# ifconfig eth0 0 up
# brctl addif br0 eth0
# ifconfig br0 IP/NETMASK up
# route add default gw GW
TUN與TAP
在計算機網絡中,TUN與TAP是操作系統內核中的虛擬網絡設備,不同於普通靠硬件網絡辦卡實現的設備,這些虛擬的網絡設備全部用軟件實現,並向運行於操作系統上的軟件提供與硬件的網絡設備完全相同的功能;
TAP等同於一個以太網設備,它操作第二層數據包如以太網數據幀,TUN模擬了網絡層設備,操作第三層數據包如IP數據包。
操作系統通過TUN/TAP設備向綁定該設備的用戶空間的程序發送數據,反之,用戶空間的程序也可以像操作硬件的網絡設備那樣,通過TUN/TAP設備發送數據,在後種情況下,TUN/TAP設備向操作系統的網絡棧投遞(或"注入")數據包,從而模擬從外部接受數據的過程。
[root@node1 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:11:21:56
inet addr:192.168.10.6 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe11:2156/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:141 errors:0 dropped:0 overruns:0 frame:0
TX packets:74 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14934 (14.5 KiB) TX bytes:9717 (9.4 KiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:11:21:60
inet addr:192.168.190.128 Bcast:192.168.190.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe11:2160/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:193 errors:0 dropped:0 overruns:0 frame:0
TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16345 (15.9 KiB) TX bytes:3153 (3.0 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
橋不支持NetworkManger管理,需要關閉NetworkManger啓動[root@node1 ~]# chkconfig --list NetworkManager
橋使用network管理
[root@node1 ~]# chkconfig --list network
network 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
[root@node1 ~]# yum -y install bridge-utils
[root@node1 ~]# rpm -ql bridge-utils
/usr/sbin/brctl
/usr/share/doc/bridge-utils-1.2
/usr/share/doc/bridge-utils-1.2/AUTHORS
/usr/share/doc/bridge-utils-1.2/COPYING
/usr/share/doc/bridge-utils-1.2/FAQ
/usr/share/doc/bridge-utils-1.2/HOWTO
/usr/share/man/man8/brctl.8.gz
[root@node1 ~]# cd /etc/sysconfig/network-scripts/
[root@node1 network-scripts]# cp ifcfg-eth0 ifcfg-br0
關閉NetworkManger服務進行管理:NM_CONTROLLED=no
[root@node1 network-scripts]# vim ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=192.168.10.6
NETMASK=255.255.255.0
[root@node1 network-scripts]# vim ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:11:21:56
TYPE=Ethernet
UUID=f343369c-4aa9-4975-81b3-3f38f4c56ef0
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
BRIDGE=br0
[root@node1 network-scripts]# service network restart
正在關閉接口 eth0: bridge br0 does not exist!
[確定]
正在關閉接口 eth1: [確定]
關閉環回接口: [確定]
彈出環回接口: [確定]
彈出界面 eth0: [確定]
彈出界面 eth1:
正在決定 eth1 的 IP 信息...完成。
[確定]
彈出界面 br0: Determining if ip address 192.168.10.6 is already in use for device br0...
[確定]
[root@node1 network-scripts]# ifconfig
br0 Link encap:Ethernet HWaddr 00:0C:29:11:21:56
inet addr:192.168.10.6 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe11:2156/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2174 (2.1 KiB) TX bytes:2264 (2.2 KiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:11:21:56
inet6 addr: fe80::20c:29ff:fe11:2156/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1353 errors:0 dropped:0 overruns:0 frame:0
TX packets:1217 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:105072 (102.6 KiB) TX bytes:120035 (117.2 KiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:11:21:60
inet addr:192.168.190.128 Bcast:192.168.190.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe11:2160/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19201 errors:0 dropped:0 overruns:0 frame:0
TX packets:8181 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:27802761 (26.5 MiB) TX bytes:449250 (438.7 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@node1 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29112156 no eth0
[root@node1 network-scripts]# brctl --help
Usage: brctl [commands]
commands:
addbr <bridge> add bridge
delbr <bridge> delete bridge
addif <bridge> <device> add interface to bridge
delif <bridge> <device> delete interface from bridge
setageing <bridge> <time> set ageing time
setbridgeprio <bridge> <prio> set bridge priority
setfd <bridge> <time> set bridge forward delay
sethello <bridge> <time> set hello time
setmaxage <bridge> <time> set max message age
sethashel <bridge> <int> set hash elasticity
sethashmax <bridge> <int> set hash max
setmclmc <bridge> <int> set multicast last member count
setmcrouter <bridge> <int> set multicast router
setmcsnoop <bridge> <int> set multicast snooping
setmcsqc <bridge> <int> set multicast startup query count
setmclmi <bridge> <time> set multicast last member interval
setmcmi <bridge> <time> set multicast membership interval
setmcqpi <bridge> <time> set multicast querier interval
setmcqi <bridge> <time> set multicast query interval
setmcqri <bridge> <time> set multicast query response interval
setmcqri <bridge> <time> set multicast startup query interval
setpathcost <bridge> <port> <cost> set path cost
setportprio <bridge> <port> <prio> set port priority
setportmcrouter <bridge> <port> <int> set port multicast router
show [ <bridge> ] show a list of bridges
showmacs <bridge> show a list of mac addrs
showstp <bridge> show bridge stp info
stp <bridge> {on|off} turn stp on/off
[root@node1 network-scripts]# brctl stp br0 on
[root@node1 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29112156 yes eth0
命令創建橋:
[root@node2 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:E8:20:12
inet addr:192.168.10.7 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee8:2012/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:27 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4781 (4.6 KiB) TX bytes:5365 (5.2 KiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:E8:20:1C
inet addr:192.168.190.129 Bcast:192.168.190.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee8:201c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:40 errors:0 dropped:0 overruns:0 frame:0
TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3072 (3.0 KiB) TX bytes:1511 (1.4 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@node2 ~]# chkconfig --list NetworkManager
[root@node2 ~]# chkconfig --list network
network 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
[root@node2 ~]# yum -y install bridge-utils
[root@node2 ~]# brctl --help
Usage: brctl [commands]
commands:
addbr <bridge> add bridge
delbr <bridge> delete bridge
addif <bridge> <device> add interface to bridge
delif <bridge> <device> delete interface from bridge
setageing <bridge> <time> set ageing time
setbridgeprio <bridge> <prio> set bridge priority
setfd <bridge> <time> set bridge forward delay
sethello <bridge> <time> set hello time
setmaxage <bridge> <time> set max message age
sethashel <bridge> <int> set hash elasticity
sethashmax <bridge> <int> set hash max
setmclmc <bridge> <int> set multicast last member count
setmcrouter <bridge> <int> set multicast router
setmcsnoop <bridge> <int> set multicast snooping
setmcsqc <bridge> <int> set multicast startup query count
setmclmi <bridge> <time> set multicast last member interval
setmcmi <bridge> <time> set multicast membership interval
setmcqpi <bridge> <time> set multicast querier interval
setmcqi <bridge> <time> set multicast query interval
setmcqri <bridge> <time> set multicast query response interval
setmcqri <bridge> <time> set multicast startup query interval
setpathcost <bridge> <port> <cost> set path cost
setportprio <bridge> <port> <prio> set port priority
setportmcrouter <bridge> <port> <int> set port multicast router
show [ <bridge> ] show a list of bridges
showmacs <bridge> show a list of mac addrs
showstp <bridge> show bridge stp info
stp <bridge> {on|off} turn stp on/off
[root@node2 ~]# brctl show
bridge name bridge id STP enabled interfaces
[root@node2 ~]# brctl addbr br0
[root@node2 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:E8:20:12
inet addr:192.168.10.7 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee8:2012/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:557 errors:0 dropped:0 overruns:0 frame:0
TX packets:385 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:48970 (47.8 KiB) TX bytes:39748 (38.8 KiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:E8:20:1C
inet addr:192.168.190.129 Bcast:192.168.190.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee8:201c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5053 errors:0 dropped:0 overruns:0 frame:0
TX packets:2694 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7236029 (6.9 MiB) TX bytes:148485 (145.0 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:200 (200.0 b) TX bytes:200 (200.0 b)
[root@node2 ~]# ifconfig eth0 0 up
[root@node2 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:E8:20:12
inet6 addr: fe80::20c:29ff:fee8:2012/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:600 errors:0 dropped:0 overruns:0 frame:0
TX packets:404 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:52372 (51.1 KiB) TX bytes:41802 (40.8 KiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:E8:20:1C
inet addr:192.168.190.129 Bcast:192.168.190.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee8:201c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5118 errors:0 dropped:0 overruns:0 frame:0
TX packets:2749 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7247051 (6.9 MiB) TX bytes:156881 (153.2 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:200 (200.0 b) TX bytes:200 (200.0 b)
[root@node2 ~]# brctl addif br0 eth0
[root@node2 ~]# ifconfig br0 192.168.10.7/24 up
[root@node2 ~]# route add default gw 192.168.10.254
[root@node2 ~]# ifconfig
br0 Link encap:Ethernet HWaddr 00:0C:29:E8:20:12
inet addr:192.168.10.7 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee8:2012/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:24 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1104 (1.0 KiB) TX bytes:468 (468.0 b)
eth0 Link encap:Ethernet HWaddr 00:0C:29:E8:20:12
inet6 addr: fe80::20c:29ff:fee8:2012/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:632 errors:0 dropped:0 overruns:0 frame:0
TX packets:410 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:54292 (53.0 KiB) TX bytes:42270 (41.2 KiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:E8:20:1C
inet addr:192.168.190.129 Bcast:192.168.190.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee8:201c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5331 errors:0 dropped:0 overruns:0 frame:0
TX packets:2881 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7263087 (6.9 MiB) TX bytes:168737 (164.7 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:200 (200.0 b) TX bytes:200 (200.0 b)