高速緩存分布式
⑴ 分布式存儲相對於單機存儲的挑戰是
1、分布式相比於傳統存儲系統的優點
①高性能:它通常可以高效地管理讀緩存和寫緩存,支持自動的分布式存儲通過將熱點區域2映射到高速緩存,提高響應速度。一旦不在是熱點,那麼存儲系統將會把他們移除。寫緩存技術可配合高速存儲明顯改變整體存儲的性能,按照一定的策略先將數據寫入高速存儲,再在適當的時間進行同步落盤。
②支持分布式存儲:通過網路進行松耦合鏈接,允許高速村塾和低速存儲分開部署。一定條件下分層存儲的優勢可以發揮到最佳。解決了最大的問題是當性能池讀不命中後,從冷池提取數據的粒度太大,導致延遲高,從而給造成整體的性能的抖動的問題。
③多副本一致性:他相比傳統的存儲框架使用RAID不同。它採用了多分本備份機制,存儲之前進行分片,之後按照一定的規則存在集群的節點上,為了保證數據一致性,布式存儲通常採用的是一個副本寫入,多個副本讀取的強一致性技術,讀取數據失敗,從其他副本獲取,重新寫入該副本恢復。
④容災與備份:對於容災採用最重要的手段就是快照,可以實現一定時間下的數據的保存。他有利於故障重現,有助於分析研究,避免災難,備份就是為了數據的安全性。
⑤彈性擴展:分布式存儲可預估並且彈性擴展計算、存儲容量和性能,節點擴展後,舊數據自動遷移到新節點上,實現負載均衡,避免單點問題。水平擴展只需要將節點和原來的集群鏈接到同一網路,整個過程不會對業務造成影響,當加節點時,集群系統的容量和性能隨之線性擴展,新節點資源會被平台接管,分配或吸收。
⑥存儲系統標准化:隨著分布式存儲的發展,存儲行業的標准化進程也不斷推進,分布式存儲優先採用行業標准介面(SMI-S或OpenStack Cinder)進行存儲接入,在平台層面,通過將異構存儲資源進行抽象化,將傳統的存儲設備級的操作封裝成面向存儲資源的操作,從而簡化異構存儲基礎架構的操作,以實現存儲資源的集中管理,並能夠自動執行創建、變更、回收等整個存儲生命周期流程。基於異構存儲整合的功能,用戶可以實現跨不同品牌、介質地實現容災,如用中低端陣列為高端陣列容災,用不同磁碟陣列為快閃記憶體陣列容災等等,從側面降低了存儲采購和管理成本。
2、分布式相比於傳統存儲系統的缺點
首先,從部署與維護的角度來看,分布式存儲部署過程較為復雜,需要專門的人才進行部署,維護與管理,需要一定的時間培養專門的人才。其次,從硬體設備角度來看,分布式存儲使用的均為X86架構伺服器,穩定性可能不如傳統的硬體存儲。尤其對於銀行,金融,政府等重要行業,穩定永遠大於一切,他們既是新技術的實踐者但同時也需要最穩定的環境保持業務的良好運行。最後,對於數據保護技術,大部分都是通過副本技術實現數據保護機制,常見的有兩副本三副本等,這樣也會造成可用存儲容量的降低。
⑵ memcache和memcached之間的區別和聯系
memcache是一套分布式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用以提升網站的訪問速度,尤其對於一些大型的、需要頻繁訪問資料庫的網站訪問速度提升效果十分顯著[1] 。這是一套開放源代碼軟體,以BSD license授權發布。
⑶ Memcached真的過時了嗎
這兩年 Redis火得可以,Redis也常常被當作 Memcached的挑戰者被提到桌面上來。關於Redis與Memcached的比較更是比比皆是。然而,Redis真的在功能、性能以及內存使用效率上都超越了Memcached嗎?
沒有必要過於關注性能,因為二者的性能都已經足夠高了。由於Redis只使用單核,而Memcached可以使用多核,所以二者比較起來,平均每一個核上,Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中,Memcached性能要高於Redis。雖然Redis最近也在存儲大數據的性能上進行優化,但是比起Memcached,還是稍有遜色。說了這么多,結論是,無論你使用哪一個,每秒處理請求的次數都不會成為瓶頸。
在內存使用效率上,如果使用簡單的key-value存儲,Memcached的內存利用率更高。而如果Redis採用hash結構來做key-value存儲,由於其組合式的壓縮,其內存利用率會高於Memcached。當然,這和你的應用場景和數據特性有關。
如果你對數據持久化和數據同步有所要求,那麼推薦你選擇Redis。因為這兩個特性Memcached都不具備。即使你只是希望在升級或者重啟系統後緩存數據不會丟失,選擇Redis也是明智的。
當然,最後還得說到你的具體應用需求。Redis相比Memcached來說,擁有更多的數據結構,並支持更豐富的數據操作。通常在Memcached里,你需要將數據拿到客戶端來進行類似的修改再set回去。這大大增加了網路IO的次數和數據體積。在Redis中,這些復雜的操作通常和一般的GET/SET一樣高效。所以,如果你需要緩存能夠支持更復雜的結構和操作,那麼Redis會是不錯的選擇。
⑷ redis和memcached的區別
Redis與Memcached的區別
傳統MySQL+ Memcached架構遇到的問題
實際MySQL是適合進行海量數據存儲的,通過Memcached將熱點數據載入到cache,加速訪問,很多公司都曾經使用過這樣的架構,但隨著業務數據量的不斷增加,和訪問量的持續增長,我們遇到了很多問題:
1.MySQL需要不斷進行拆庫拆表,Memcached也需不斷跟著擴容,擴容和維護工作占據大量開發時間。
2.Memcached與MySQL資料庫數據一致性問題。
3.Memcached數據命中率低或down機,大量訪問直接穿透到DB,MySQL無法支撐。
4.跨機房cache同步問題。
眾多NoSQL百花齊放,如何選擇
最近幾年,業界不斷涌現出很多各種各樣的NoSQL產品,那麼如何才能正確地使用好這些產品,最大化地發揮其長處,是我們需要深入研究和思考的問題,實際歸根結底最重要的是了解這些產品的定位,並且了解到每款產品的tradeoffs,在實際應用中做到揚長避短,總體上這些NoSQL主要用於解決以下幾種問題
1.少量數據存儲,高速讀寫訪問。此類產品通過數據全部in-momery 的方式來保證高速訪問,同時提供數據落地的功能,實際這正是Redis最主要的適用場景。
2.海量數據存儲,分布式系統支持,數據一致性保證,方便的集群節點添加/刪除。
3.這方面最具代表性的是dynamo和bigtable 2篇論文所闡述的思路。前者是一個完全無中心的設計,節點之間通過gossip方式傳遞集群信息,數據保證最終一致性,後者是一個中心化的方案設計,通過類似一個分布式鎖服務來保證強一致性,數據寫入先寫內存和redo log,然後定期compat歸並到磁碟上,將隨機寫優化為順序寫,提高寫入性能。
4.Schema free,auto-sharding等。比如目前常見的一些文檔資料庫都是支持schema-free的,直接存儲json格式數據,並且支持auto-sharding等功能,比如mongodb。
面對這些不同類型的NoSQL產品,我們需要根據我們的業務場景選擇最合適的產品。
Redis適用場景,如何正確的使用
前面已經分析過,Redis最適合所有數據in-momory的場景,雖然Redis也提供持久化功能,但實際更多的是一個disk-backed的功能,跟傳統意義上的持久化有比較大的差別,那麼可能大家就會有疑問,似乎Redis更像一個加強版的Memcached,那麼何時使用Memcached,何時使用Redis呢?
如果簡單地比較Redis與Memcached的區別,大多數都會得到以下觀點:
1 Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
2 Redis支持數據的備份,即master-slave模式的數據備份。
3 Redis支持數據的持久化,可以將內存中的數據保持在磁碟中,重啟的時候可以再次載入進行使用。
拋開這些,可以深入到Redis內部構造去觀察更加本質的區別,理解Redis的設計。
在Redis中,並不是所有的數據都一直存儲在內存中的。這是和Memcached相比一個最大的區別。Redis只會緩存所有的 key的信息,如果Redis發現內存的使用量超過了某一個閥值,將觸發swap的操作,Redis根據「swappability = age*log(size_in_memory)」計 算出哪些key對應的value需要swap到磁碟。然後再將這些key對應的value持久化到磁碟中,同時在內存中清除。這種特性使得Redis可以 保持超過其機器本身內存大小的數據。當然,機器本身的內存必須要能夠保持所有的key,畢竟這些數據是不會進行swap操作的。同時由於Redis將內存 中的數據swap到磁碟中的時候,提供服務的主線程和進行swap操作的子線程會共享這部分內存,所以如果更新需要swap的數據,Redis將阻塞這個 操作,直到子線程完成swap操作後才可以進行修改。
使用Redis特有內存模型前後的情況對比:
VM off: 300k keys, 4096 bytes values: 1.3G used
VM on: 300k keys, 4096 bytes values: 73M used
VM off: 1 million keys, 256 bytes values: 430.12M used
VM on: 1 million keys, 256 bytes values: 160.09M used
VM on: 1 million keys, values as large as you want, still: 160.09M used
當 從Redis中讀取數據的時候,如果讀取的key對應的value不在內存中,那麼Redis就需要從swap文件中載入相應數據,然後再返回給請求方。 這里就存在一個I/O線程池的問題。在默認的情況下,Redis會出現阻塞,即完成所有的swap文件載入後才會相應。這種策略在客戶端的數量較小,進行 批量操作的時候比較合適。但是如果將Redis應用在一個大型的網站應用程序中,這顯然是無法滿足大並發的情況的。所以Redis運行我們設置I/O線程 池的大小,對需要從swap文件中載入相應數據的讀取請求進行並發操作,減少阻塞的時間。
如果希望在海量數據的環境中使用好Redis,我相信理解Redis的內存設計和阻塞的情況是不可缺少的。
⑸ 網路代理伺服器的貢獻
Cache產品是綜合解決Internet內容傳輸的增值服務產品。我們知道,影響Internet傳輸效率和速度的三個主要因素有:帶寬、距離(路徑數)、源伺服器供應能力(伺服器性能瓶頸)。網路傳輸優化的解決方案是將用戶所要訪問的數據放在離用戶盡可能近的伺服器上,即將內容「推送」或「分發」到靠近用戶端。Cache一般部署在網路邊緣,將減少上聯廣域帶寬消耗、縮短訪問距離、增加了就近內容供應網點,從三方面有效解決網路低效和響應速度慢的問題,是一個非常有效的概念和解決方案。具體來講,高速緩存伺服器充當Web請求的網關,並執行基本Web伺服器的職能,例如檢索請求並為URL服務。它轉發來自自客戶機和其他Web伺服器的請求,並將伺服器的響應返回給客戶機。 高速緩沖代理伺服器可以保存(或高速緩存)它從其他站點檢索到的Web文檔,並在本地處理隨後的信息請求。用戶可以更快地獲得信息,同時還節省了網路帶寬。因為Cache伺服器既可以看到客戶機請求,也可以看到響應,所以它能夠執行附加的調解,例如 PICS 過濾、內容轉換、為適合不同客戶機介質(例如,掌上型機)而作的變換等。
簡而言之,高速緩存(Web Cache)是通過分布式地放置伺服器及合理配置緩存Cache,從而降低廣域網的寬頻負荷,並能提高網站內容的響應速度。
⑹ 分布式儲能技術優勢是什麼
分布式存儲,無疑是雲計算時代最受關注的一門技術。
到底什麼是分布式存儲?
簡單來說,人多力量大,利用多個存儲伺服器構建存儲池,滿足互聯網時代越來越多的存儲需求。
互聯網行業的發展,數據成指數級增長,人們對存儲的需求越來越大,採用集中式的存儲成為數據中心系統的瓶頸,不能滿足大規模存儲應用的需要。
受益於伺服器技術的發展和成熟,與標准伺服器的分布式存儲開始出現,分布式存儲開始被廣泛的應用起來。
分布式存儲就是將數據分散存儲到多個存儲伺服器上,並將這些分散的存儲資源構成一個虛擬的存儲設備,實際上數據分散的存儲在企業的各個角落。分布式存儲的好處是提高了系統的可靠性、可用性和存取效率,還易於擴展。
1、易於擴展
得益於合理的分布式架構,分布式存儲可預估並且彈性擴展計算、存儲容量和性能。
2、高性能
一個具有高性能的分布式存儲通常能夠高效地管理讀緩存和寫緩存,並且支持自動的分級存儲。
3、支持分級存儲
由於通過網路進行松耦合鏈接,分布式存儲允許高速存儲和低速存儲分開部署,或者任意比例混布。
4、多副本一致性
與傳統的存儲架構使用RAID模式來保證數據的可靠性不同,分布式存儲採用了多副本備份機制,最小化對業務的影響。
5、存儲系統標准化
隨著分布式存儲的發展,存儲行業的標准化進程也不斷推進,分布式存儲優先採用行業標准介面(SMI-S或OpenStackCinder)進行存儲接入,用戶可以實現跨不同品牌、介質地實現容災,從側面降低了存儲采購和管理成本。
▉最後總結
分布式存儲是一個大的概念,其包含的種類繁多,除了傳統意義上的分布式文件系統、分布式塊存儲和分布式對象存儲外,還包括分布式資料庫和分布式緩存等。
⑺ 分布式架構的對比
EMC VMAX
VMAX架構包含1個到8個VMAX引擎(存儲節點)。這些引擎相互連接在一起,被稱為虛擬Matrix架構。每個引擎都可以當作存儲陣列,擁有自己的前端主機埠連接、後端磁碟導向器、高速緩存(內部鏡像化)和處理器。VMAX引擎使用Matrix介面主板封裝器(MIBE)連接在一起。MIBE有副本以備冗餘。虛擬Matrix可以進行引擎之間的記憶體訪問。當主機訪問埠和數據不在同一個引擎上的時候需要虛擬Matrix提供連接性。
3Par InServ
3Par由多個存儲節點組成。這些存儲節點匯集到一個高速連接上。3Par稱之為InSpire架構。2到8個節點(按對配置)連接到一個被動背板,每個節點之間的帶寬可高達1.6Gb/秒。3Par如圖所示展示他們的8節點架構,連接的數量很容易就能看清楚。我還看到2節點、4節點、6節點和8節點部署下的連接是如何增加的。InServ陣列按對寫入高速緩存數據,因此每個節點都有一個伴點。如果一個節點發生故障,伴點上的高速緩存可以馬上寫入另一個節點,從而保護高速緩存數據。
IBM XIV
IBM XIV陣列採用的是另一種節點設置方式。節點直接連接到底層硬體的數據保護機制。XIV只使用RIAD-1類型的保護,採用的是1MB大小的數據塊,也稱為分區。數據以偽隨機方式均勻分布在節點上,確保對任何LUN來說,數據都是寫入在所有節點上。本文底部的XIV圖片顯示了這個架構。節點(在XIV中稱為模塊)分成介面模塊和數據模塊。介面模塊有自己的高速緩存、處理器、數據磁碟和主機介面。數據模塊沒有主機介面,但是仍然有高速緩存、處理器和磁碟。每個模塊有12個1TB SATA驅動器。當數據寫入陣列的時候,這些1MB分區寫入到所有驅動器和模塊中,確保任意一個分區的兩個鏡像對不會都處在同一個模塊上。LUN的順序分區分布在各個模塊上。這樣做的結果就是所有的模塊都參與服務所有的卷,且單個模塊的故障不會導致數據丟失。
⑻ 小白談memcache和memcached的區別
Memcache是什麼?
Memcache是一個自由和開放源代碼、高性能、分配的內存對象緩存系統。用於加速動態web應用程序,減輕資料庫負載。它可以應對任意多個連接,使用非阻塞的網路IO。由於它的工作機制是在內存中開辟一塊空間,然後建立一個Hash表,Memcached自管理這些Hash表。
Memcached是簡單而強大的。它簡單的設計促進迅速部署,易於發展所面臨的問題,解決了很多大型數據緩存。它的API可供最流行的語言。
Memcache官方網站:http://memcached.org/
Memcached又是什麼?
Memcache是該系統的項目名稱,Memcached是該系統的主程序文件(字母d可以理解為daemon),以守護程序方式運行於一個或多個伺服器中,隨時接受客戶端的連接操作,使用共享內存存取數據。
memcache客戶端(php)
PHP有兩個memcache客戶端:php memcache和php memcached。
php memcache獨立用php實現,是老客戶端,從我們實踐中已發現有多個問題,而且功能少,屬性也可設置的少;
http://pecl.php.net/package/memcache
php memcached是基於原生的c的libmemcached的擴展,更加完善,建議替換為php memcached。
http://pecl.php.net/package/memcached
memcached安裝(服務端)
cd /root/lnmp/src/
wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
tar xzf memcached-1.4.15.tar.gz
cd memcached-1.4.15
./configure --prefix=/usr/local/memcached
make && make install
ln -s /usr/local/memcached/bin/memcached /usr/bin/memcached
/bin/cp scripts/memcached.sysv /etc/init.d/memcached
sed -i 's@^USER=.*@USER=root@' /etc/init.d/memcached
sed -i 's@chown@#chown@' /etc/init.d/memcached
sed -i 's@/var/run/memcached/memcached.pid@/var/run/memcached.pid@' /etc/init.d/memcached
sed -i 's@^prog=.*@prog="/usr/local/memcached/bin/memcached"@' /etc/init.d/memcached #前面有軟鏈接,這里可以省略
chmod +x /etc/init.d/memcached
chkconfig --add memcached
chkconfig memcached on
cd ..
啟動memcached:
service memcached start #或者執行下面
memcached -p 11211 -l 127.0.0.1 -d -u root -P /var/run/memcached.pid -m 64M -c 1024
幾個參數的解釋:
-p memcached監聽的TCP埠
-l 監聽的ip地址,127.0.0.1是本機,當然也可以寫上你的伺服器IP,如:10.0.0.10,這是我伺服器的IP地址,如果你需要多個伺服器都能夠讀取這台memcached的緩存數據,那麼就必須設定這個ip
-d 以daemon方式運行,將程序放入後台
-u memcached的運行用戶,我設定的是nobody
-P memcached的pid文件路徑
-m memcached可以使用的最大內存數量
-c memcached同時可以接受的最大的連接數
如果你希望以socket方式來訪問memcached,那麼在啟動的時候就必須去掉 -l和-p參數,並加上-s參數:
-s memcached的socket文件路徑
php中memcache擴展組件的安裝:
tar xzf memcache-2.2.7.tgz
cd memcache-2.2.7
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
cd ../
按照我的環境,編譯出來的memcache.so自動生成在/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/ 目錄下,如果你的環境不一樣,你得根據自己情況修改你的php.ini了。
接著要做的工作就是讓php載入這個擴展,編輯你的php.ini,在適當位置(通常是最後,也可以是獨立的一個ini文件)加入如下行:
extension=memcache.so
然後重啟php或者apache,運行一個phpinfo()來確認一下,正常的話你應該可以看到這個了:memcache
php-memcache的簡單使用舉例:
<?php
$memcache = new Memcache;
$memcache->connect('127.0.0.1','11211');
$memcache->setCompressThreshold(20000, 0.2); // 設置壓縮
echo $memcache->getVersion(); // 輸出memcached版本
$test = array(1,2,3,4,5,'abcde'); //生成一個數組
if($memcache->get('test')){
print_r($memcache->get('test')); //獲取數據
echo "\n";
echo 'cached';
echo "\n";
}else{
$memcache->set('test',$test,0,30); //寫入數據
echo 'no cache';
echo "\n";
}
?>
php中memcached擴展組件的安裝(LNMP一鍵安裝包):
最新版ibmemcached-1.0.17.tar.gz可能會報錯
error: 『HAVE_MEMCACHED_BINARY』 was not declared in this scope
用libmemcached-1.0.16.tar.gz沒問題
安裝如下:
wget https://launchpad.net/libmemcached/1.0/1.0.16/+download/libmemcached-1.0.16.tar.gz
wget http://pecl.php.net/get/memcached-2.1.0.tgz
tar xzf libmemcached-1.0.16.tar.gz
cd libmemcached-1.0.16
./configure --with-memcached=/usr/local/memcached
make && make install
cd ..
tar xzf memcached-2.1.0.tgz
cd memcached-2.1.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
按照我的環境,編譯出來的memcached.so自動生成在 /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/ 目錄下,如果你的環境不一樣,你得根據自己情況修改你的php.ini了。
接著要做的工作就是讓php載入這個擴展,編輯你的php.ini,在適當位置(通常是最後,也可以是獨立的一個ini文件)加入如下行:
extension=memcached.so
然後重啟php或者apache,運行一個phpinfo()來確認一下,正常的話你應該可以看到這個了:memcached
總結:
其實很簡單,memcache是php的一個擴展,用於php管理memcached(服務端),php-memcache.dll。
如果安裝了memcached(服務端)不安裝擴展,那麼php無法操控memcached,但是命令行使用起來沒有問題
如果安裝了PHP memcache客戶端(php memcache和php memcached)。但是沒有安裝memcached(服務端)服務,那麼這個就無法使用
只有同時安裝了memcached(服務端)和PHP memcache客戶端擴展才可以提高動態網站性能
⑼ 緩存系統中的主要使用的數據結構是什麼
緩存系統中的主要使用的數據結構是memcached。
memcached是一套分布式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,但被許多網站使用。這是一套開放源代碼軟體,以BSD license授權發布。
memcached的API使用三十二比特的循環冗餘校驗(CRC-32)計算鍵值後,將數據分散在不同的機器上。當表格滿了以後,接下來新增的數據會以LRU機制替換掉。
由於memcached通常只是當作緩存系統使用,所以使用memcached的應用程序在寫回較慢的系統時(像是後端的資料庫)需要額外的代碼更新memcached內的數據。
(9)高速緩存分布式擴展閱讀:
一、存儲方式
為了提高性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。由於數據僅存在於內存中,因此重啟memcached、重啟操作系統會導致全部數據消失。
另外,內容容量達到指定值之後,就基於LRU(Least Recently Used)演算法自動刪除不使用的緩存。memcached本身是為緩存而設計的伺服器,因此並沒有過多考慮數據的永久性問題。
二、通信分布式
memcached盡管是「分布式」緩存伺服器,但伺服器端並沒有分布式功能。各個memcached不會互相通信以共享信息。那麼,怎樣進行分布式呢?這完全取決於客戶端的實現。本文也將介紹memcached的分布式。
⑽ 計算機操作系統的基本概念
計算機操作系統的基本概念
操作系統是管理和控制計算機硬體與軟體資源的計算機程序,是直接運行在「裸機」上的最基本的系統軟體,任何其他軟體都必須在操作系統的支持下才能運行。下面是我整理的計算機操作系統的基本概念,希望大家認真閱讀!
1、操作系統做什麼
註:計算機系統結構作為從程序設計者角度所看到的計算機屬性,在計算機系統的層次結構中處於機器語言級;而計算機組織作為計算機系統結構的邏輯實現和物理實現,其任務就是圍繞提高性能價格比的目標,實現計算機在機器指令級的功能和特性。研究和建立各功能部件間的相互連接和相互作用,完成各個功能部件內部的邏輯設計等是邏輯實現的內容;把邏輯設計深化到元件、器件級,則是物理實現的內容。
計算機系統可以大致分為四個組成部分:計算機硬體、操作系統、系統程序與應用程序和用戶。
硬體為系統提供基本的計算資源,應用程序規定了用戶按何種方式使用這些資源,操作系統控制和協調各用戶的應用程序對硬體的使用。
從兩個視角探索操作系統:用戶視角和系統視角。
A、用戶視角:
對於PC用戶,系統設計是為了讓單個用戶單獨使用其資源,其目的是優化用戶所進行的工作。對於這種情況,操作系統的設計目的是為了用戶使用方便,性能是次要的,而且不在乎資源使用率。
對於大型機用戶,操作系統設計為資源使用做了優化:確保所有的CPU時間、內存和I/O都得到充分使用,並且確保沒有用戶使用超出其許可權以外的資源。
對於工作站用戶,操作系統的設計目的是個人使用性能和資源使用率的折中。
對於手持計算機用戶,方便個人使用,最大化利用電池能源是操作系統設計的要點。
B、系統視角:
從系統視角,操作系統相當於資源分配器。操作系統管理CPU時間、內存空間等系統資源,在面對許多甚至沖突的資源請求,操作系統必須決定如何為每個程序和用戶分配資源,以便計算機系統能有效而公平的運行。
2、計算機系統組織
計算機通過運算器、存儲器、控制器、輸入輸出子系統等主要功能部件的相互連接和相互作用,藉以實現機器指令級的各種功能和特性。從最基本的功能和作用原理來說,計算機是在控制器的全面控制下,接收經數字化編碼的輸入信息(程序和數據),把它存放在存儲器中,根據程序的要求對數據進行快速運算,產生結果數據輸出。因此,可以把運算器、存儲器、控制器、輸入輸出子系統看成是一台計算機的邏輯組成中最基本的功能部件。
存儲設備層次(按匯流排速率由高到低):
寄存器——高速緩存(Cache)——主存——磁碟——光碟——磁帶
3、計算機系統體系結構
通過採用的通用處理器的數量來分類。
A、單處理器系統
在單處理器系統中,有一個主CPU能夠執行一個通用指令集,包括來自用戶進程的指令。
B、多處理器系統
多處理器系統的優點:
增加吞吐量;規模經濟;增加可靠性。
分類:
非對稱多處理器(asymmetric multiprocessing)系統——主從關系;
對稱多處理器(symmetric multiprocessing)系統——對等關系。
C、集群系統
集群計算機共享存儲並通過區域網連接或更快的內部連接。
分類:
非對稱集群:一部分機器處於熱備份模式,其餘的機器運行應用程序。
對稱集群:兩台或多個主機都運行程序,互相監視。
4、操作系統結構
操作系統理論研究者有時把操作系統分成四大部分:
驅動程序:最底層的、直接控制和監視各類硬體的部分,它們的職責是隱藏硬體的具體細節,並向其他部分提供一個抽象的、通用的介面。
內核:操作系統內核部分,通常運行在最高特權級,負責提供基礎性、結構性的功能。
介面庫:是一系列特殊的程序庫,它們職責在於把系統所提供的基本服務包裝成應用程序所能夠使用的編程介面(API),是最靠近應用程序的部分。例如,GNU C運行期庫就屬於此類,它把各種操作系統的內部編程介麵包裝成ANSI C和POSIX編程介面的形式。
外圍:是指操作系統中除以上三類以外的所有其他部分,通常是用於提供特定高級服務的部件。例如,在微內核結構中,大部分系統服務,以及UNIX/Linux中各種守護進程都通常被劃歸此列。
在這里,需要介紹一些關於內核的知識。
內核是操作系統最核心最基礎的構件,內核結構往往對操作系統的外部特性以及應用領域有著一定程度的影響。
內核的結構可以分為單內核、微內核、混合內核、外內核等。
單內核(Monolithic kernel),又稱為宏內核。此架構的特性是整個核心程序都是以核心空間(Kernel Space)的身份及監管者模式(Supervisor Mode)來運行(宏內核被實現為運行在單一地址空間的單一的進程,核心提供的所有服務,都以特權模式,在這個大型的核心地址空間中運作,這個地址空間被稱為核心空間(kernel space))。相對於其他類型的操作系統架構,如微核心架構或混核心架構等,這些核心會定義出一個高級的虛擬介面,由該介面來涵蓋描述整個電腦硬體,這些描述會集合成一組硬體描述用詞,有時還會附加一些系統調用,如此可以用一個或多個模塊來實現各種操作系統服務,如進程管理、共時(Concurrency)控制、存儲器管理等。
微內核(Microkernel),又稱為微核心。微內核結構是1980年代產生出來的較新的內核結構,強調結構性部件與功能性部件的分離。微核心的設計理念,是將系統服務的實現,與系統的基本操作規則區分開來。它實現的方式,是將核心功能模塊化,劃分成幾個獨立的進程,各自運行,這些進程被稱為伺服器(service)。所有的伺服器進程,都運行在不同的地址空間。只有需要絕對特權的進程,才能在具特權的運行模式下運行,其餘的進程則在用戶 空間運行。
混合內核(Hybrid kernel)像微內核結構,只不過它的組件更多的在核心態中運行,以獲得更快的執行速度。混合內核,一種操作系統內核架構,結合整塊性核心與單核心兩種設計方法。它的架構實作方式接近於整塊性核心。最有名的混合核心為Windows NT核心與XNU。
外內核(Exokernel)的設計理念是盡可能的減少軟體的抽象化,這使得開發者可以專注於硬體的抽象化。外核心的設計極為簡化,它的目標是在於同時簡化傳統微內核的訊息傳遞機制,以及整塊性核心的軟體抽象層。外核的目標就是讓應用程序直接請求一塊特定的物理空間,一塊特定的磁碟塊等等。系統本身只保證被請求的資源當前是空閑的,應用程序就允許直接存取它。
在眾多常用操作系統之中,除了QNX和基於Mach的UNIX等個別系統外,幾乎全部採用單內核結構,例如大部分的Unix、Linux,以及Windows(微軟聲稱Windows NT是基於改良的微內核架構的,盡管理論界對此存有異議。
5、操作系統操作
*雙重模式操作*:
為了確保操作系統地正常執行,必須區分操作系統代碼和用戶定義代碼的執行。許多操作系統所採取的方法是提供硬體支持以允許區分各種執行模式。
至少需要兩種獨立的操作模式:用戶模式(user mode)和監督程序模式(monitor mode)(也稱為管理模式(supervisor mode)、系統模式(system mode)或特權模式(privileged mode))。在計算機硬體中增加一個稱為模式位(mode bit)的位以表示當前模式:監督程序模式(0)和用戶模式(1)。有了模式位,就可以區分操作系統所執行的任務和用戶所執行的任務。
系統引導時,硬體開始處於內核模式。接著,裝入操作系統,開始在用戶模式下執行用戶進程。一旦出現陷阱或中斷,硬體會從用戶模式切換到內核模式。因此,只要操作系統獲得了對計算機的控制,它就處於內核模式。系統在將控制交還給用戶程序時會切換到用戶模式。
雙重模式操作提高了保護操作系統和用戶程序不受錯誤用戶程序影響的手段。其實現為:將能引起損害的機器指令作為特權指令。如果在用戶模式下試圖執行特權指令,那麼硬體並不執行該指令,而是認為該指令非法,並將其以陷阱的形式通知操作系統。
系統調用為用戶程序請求操作系統代表用戶程序完成預留給操作系統的任務提供了方法。系統調用通常採用陷阱到中斷向量中的一個指定位置的方式。當系統調用被執行時,硬體會將它作為軟體中斷。控制權會通過中斷向量轉交到操作系統的中斷處理程序,模式位設置成內核模式。系統調用服務程序是操作系統的一部分。內核檢查中斷指令以確定發生了什麼系統調用;參數表示用戶程序請求什麼類型的服務。請求所需要的其他信息可通過寄存器、堆棧或內存來傳遞。內核檢驗參數是否正確和合法,再執行請求,然後將控制返回到系統調用之後的指令。
6、進程管理
進程是系統工作的單元。系統由多個進程組成,其中一些是操作系統進程(執行系統代碼),其餘的是用戶進程(執行用戶代碼)。所有這些進程可以潛在地並發執行,如通過在單CPU上採用CPU復用來實現。
操作系統負責下述與進程管理相關的活動:
*創建和刪除用戶進程和系統進程;
*掛起和重啟進程;
*提供進程同步機制;
*提供進程通信機制;
*提供死鎖處理機制。
7、內存管理
內存是現代計算機系統操作的中心。內存通常是CPU所能直接定址和訪問的唯一大容量存儲器。
操作系統負責下列有關內存管理的活動:
*記錄內存的哪部分正在被使用及被誰使用;
*當有內存空間是,決定哪些進程可以裝入內存;
*根據需要分配和釋放內存空間。
8、存儲管理
操作系統對存儲設備上的物理屬性進行了抽象,定義了邏輯存儲單元,即文件。操作系統將文件映射到物理介質上,並通過這些物理介質來訪問這些文件。
A、文件系統管理
文件管理是操作系統最為常見的組成部分。文件是由其創建者定義的一組相關信息的集合。通常,文件表示程序(源程序和目標程序)和數據。
操作系統負責下列有關文件管理的活動:
*創建和刪除文件;
*創建和刪除目錄來組織文件;
*提供操作文件和目錄的原語;
*將文件映射到二級存儲上;
*在穩定介質上備份文件。
B、大容量存儲器管理
絕大多數現代計算機系統都採用硬碟作為主要非易失存儲介質來存儲程序和數據。許多程序都存儲在硬碟上,要執行時才調入內存,在執行時將硬碟作為處理的來源地和目的地。因此,硬碟的適當管理對計算機系統尤為重要。
操作系統負責下列有關硬碟管理的活動:
*空閑空間管理;
*存儲空間分配;
*硬碟調度。
C、高速緩存
高速緩沖存儲器是存在於主存與CPU之間的一級存儲器,由靜態存儲晶元(SRAM)組成,容量比較小但速度比主存高得多,接近於CPU的速度。硬體高速緩存基於著名的局部性原理,該原理既適用於程序結構也適用於數據結構。在有高速緩沖存儲器的.計算機系統中,中央處理器存取主存儲器的地址劃分為行號、列號和組內地址三個欄位。於是,主存儲器就在邏輯上劃分為若干行;每行劃分 為若乾的存儲單元組;每組包含幾個或幾十個字。高速存儲器也相應地劃分為行和列的存儲單元組。二者的列數相同,組的大小也相同,但高速存儲器的行數卻比主 存儲器的行數少得多。
高速緩存主要由三大部分組成:
*Cache存儲體:存放由主存調入的指令與數據塊。
*地址轉換部件:建立目錄表以實現主存地址到緩存地址的轉換。
*替換部件:在緩存已滿時按一定策略進行數據塊替換,並修改地址轉換部件。
操作系統執行高速緩存管理,對高速緩存大小和置換策略的仔細選擇可以極大提高性能。
D、I/O子系統
I/O子系統包括如下幾個部分:
*一個包括緩沖、高速緩存和假離線的內存管理部分;
*通用設備驅動器介面;
*特定硬體設備的驅動程序。
9、保護和安全
保護是一種控制進程或用戶對計算機資源的訪問的機制。這個機制必須為強加控制提供一種規格說明方法和一種強制執行方法。
安全的主要工作是防止系統不受外部或內部攻擊。這些攻擊范圍很廣,包括病毒和蠕蟲、拒絕服務攻擊、身份偷竊、服務偷竊。
10、分布式系統
分布式系統是將一組物理上分開來的、各種可能的異構的計算機系統通過網路連接在一起,為用戶提供系統所維護的各種資源的計算機的集合。
分布式系統(distributed system)是建立在網路之上的軟體系統。正是因為軟體的特性,所以分布式系統具有高度的內聚性和透明性。因此,網路和分布式系統之間的區別更多的在於高層軟體(特別是操作系統),而不是硬體。內聚性是指每一個資料庫分布節點高度自治,有本地的資料庫管理系統。透明性是指每一個資料庫分布節點對用戶的應用來說都是透明的,看不出是本地還是遠程。
網路操作系統(Network Operating System)提供跨網路的文件共享、包括允許不同計算機上的進程進行消息交換的通信方法等功能。
11、專用系統
*實時嵌入式系統
*多媒體系統
*手持系統
12、計算環境
*傳統計算
*客戶機-伺服器計算
*對等計算
*基於Web的計算
拓展:計算機三級考試網路操作系統基本概念
1.單機操作系統
單機操作系統包括幾個方面的管理功能:進程與處理機管理、作業管理、存儲管理、設備管理、文件管理等。
(1)操作系統的管理功能
①進程管理:所謂進程(Process)就是一個將執行的程序,它附有該進程的地址空間、相應的寄存器組以及運行程序所需要的其他信息。操作系統必須提供一種啟動進程的機制。在DOS中,該機制就是EXEC函數。在Windows中啟動進程的函數是CreateProcess。
②內存管理:操作系統的內存管理功能是管理內存資源,主要實現內存的分配與回收、存儲保護以及內存的擴充等。
③文件系統:文件系統負責管理在硬碟和其他大容量存儲設備中存儲的文件,通過文件管理向用戶提供創建文件、刪除文件、讀寫文件、打開和關閉文件等功能。
DOS通過文件表FAT尋找磁碟文件; Windows通過虛擬文件表VFAT來尋找磁碟文件; OS/2通過高性能文件系統HPFS來尋找磁碟文件。一般來說,HPFS的性能要比FAT和VFAT都好。
④設備I/O操作系統的設備管理負責分配和回收外部設備,以及控制外圍設備按用戶程序的要求進行操作。DOS使用驅動程序來管理設備。
(2)操作系統的結構
操作系統通常有4類組件。
①驅動程序;
②內核;
③介面庫;
④外圍組件
2.網路操作系統
網路操作系統(NOS)是指能使網路上各個計算機方便而有效地共享網路資源,為用戶提供所需的各種服務的操作系統軟體。
網路操作系統的基本任務是:屏蔽本地資源與網路資源的差異性,為用戶提供各種基本網路服務功能,實現網路系統資源的共享管理,並提供網路系統的安全保障。
什麼是Web OS?Web OS是一個運行在網頁瀏覽器中的虛擬操作系統,更精確地說,Web OS是一個運行在網頁瀏覽器中的應用程序集合。因此,有人把NOS稱為伺服器操作系統,把Web OS稱為客戶端操作系統。
3.網路操作系統的分類
一般來說,網路操作系統可以分為兩類:專用型NOS與通用型NOS。
4.網路操作系統的基本功能
網路操作系統的基本功能有:文件服務、列印服務、資料庫服務、通信服務、信息服務、分布式服務、網路管理服務、Internet/Intranet服務。
;