第一篇:關(guān)于磁盤IO的總結(jié)
磁盤IO的總結(jié):
1.IO讀寫:磁盤是用來存取數(shù)據(jù)的。磁盤的存數(shù)據(jù)對應(yīng)IO的寫操作,磁盤的取數(shù)據(jù)對應(yīng)IO的讀操作。
2.隨機(jī)訪問(Random Access)與連續(xù)訪問(Sequential Access):
隨機(jī)訪問指的是本次IO所給出的扇區(qū)地址和上次IO給出扇區(qū)地址相差比較大,這樣的話磁頭在兩次IO操作之間需要做比較大的移動動作才能重新開始讀/寫數(shù)據(jù)。
同理,連續(xù)訪問就是兩次給出的扇區(qū)地址相近,磁頭就能很快的進(jìn)行操作,這樣的多個(gè)IO操作就是連續(xù)訪問。
3.順序IO模式(Queue Mode)/并發(fā)IO模式(BurstMode):
原理:磁盤控制器可能會一次對磁盤組發(fā)出一連串的IO命令,如果磁盤組一次只能執(zhí)行一個(gè)IO命令時(shí)稱為順序IO;當(dāng)磁盤組能同時(shí)執(zhí)行多個(gè)IO命令時(shí),稱為并發(fā)IO。
并發(fā)IO只能發(fā)生在由多個(gè)磁盤組成的磁盤組上,單塊磁盤只能一次處理一個(gè)IO命令。
4.IOPS,IO系統(tǒng)每秒所執(zhí)行IO操作的次數(shù)
5.一次完整的磁盤IO操作:
當(dāng)控制器對磁盤發(fā)出一個(gè)IO操作命令的時(shí)候,磁盤的驅(qū)動臂(ActuatorArm)帶讀寫磁頭(Head)離開著陸區(qū)(LandingZone,位于內(nèi)圈沒有數(shù)據(jù)的區(qū)域),移動到要操作的初始數(shù)據(jù)塊所在的磁道(Track)的正上方,這個(gè)過程被稱為尋址(Seeking),對應(yīng)消耗的時(shí)間被稱為尋址時(shí)間(SeekTime);但是找到對應(yīng)磁道還不能馬上讀取數(shù)據(jù),這時(shí)候磁頭要等到磁盤盤片(Platter)旋轉(zhuǎn)到初始數(shù)據(jù)塊所在的扇區(qū)(Sector)落在讀寫磁頭正上方的之后才能開始讀取數(shù)據(jù),在這個(gè)等待盤片旋轉(zhuǎn)到可操作扇區(qū)的過程中消耗的時(shí)間稱為旋轉(zhuǎn)延時(shí)(RotationalDelay);接下來就隨著盤片的旋轉(zhuǎn),磁頭不斷的讀/寫相應(yīng)的數(shù)據(jù)塊,直到完成這次IO所需要操作的全部數(shù)據(jù),這個(gè)過程稱為數(shù)據(jù)傳送(DataTransfer),對應(yīng)的時(shí)間稱為傳送時(shí)間(TransferTime)。完成這三個(gè)步驟之后一次IO操作也就完成了。
6.傳輸速度(Transfer Rate)/吞吐率(Throughput):是磁盤在實(shí)際使用的時(shí)候從磁盤系統(tǒng)總線上流過的數(shù)據(jù)量。
7.IO響應(yīng)時(shí)間也被稱為IO延時(shí)(IOLatency),IO響應(yīng)時(shí)間就是從操作系統(tǒng)內(nèi)核發(fā)出的一個(gè)讀或者寫的IO命令到操作系統(tǒng)內(nèi)核接收到IO回應(yīng)的時(shí)間,注意不要和單個(gè)IO時(shí)間混淆了,單個(gè)IO時(shí)間僅僅指的是IO操作在磁盤內(nèi)部處理的時(shí)間,而IO響應(yīng)時(shí)間還要包括IO操作在IO等待隊(duì)列中所花費(fèi)的等待時(shí)間。
8.dd命令 dd:硬拷貝命令(直接在硬盤上進(jìn)行數(shù)據(jù)拷貝,沒有經(jīng)過內(nèi)存,二進(jìn)制之間的協(xié)調(diào)復(fù)制)
bs=BYTES:一次讀取和寫入的字節(jié)數(shù)(單元大小)
count=BLOCKS:單元數(shù)量
if=FILE:源文件
of=FILE:目標(biāo)文件
測試磁盤的寫入:
[root@localhost ~]# /usr/bin/time dd if=/dev/zero of=/tmp/hx bs=4k count=10240 10240+0 records in 10240+0 records out 41943040 bytes(42 MB)copied, 0.0577 s, 727 MB/s 0.00user 0.05system 0:00.05elapsed 96%CPU(0avgtext+0avgdata 832maxresident)k 0inputs+81920outputs(0major+241minor)pagefaults 0swaps
測試磁盤的讀取:
[root@localhost ~]# /usr/bin/time dd if=/tmp/hx of=/dev/null bs=4k 10240+0 records in 10240+0 records out 41943040 bytes(42 MB)copied, 0.014955 s, 2.8 GB/s 0.00user 0.01system 0:00.01elapsed 86%CPU(0avgtext+0avgdata 828maxresident)k 0inputs+0outputs(0major+240minor)pagefaults 0swaps
讀寫同時(shí)測試
[root@localhost ~]# /usr/bin/time dd if=/tmp/foo of=/tmp/foo2 bs=4k 10240+0 records in 10240+0 records out 41943040 bytes(42 MB)copied, 0.0742246 s, 565 MB/s 0.00user 0.08system 0:00.08elapsed 97%CPU(0avgtext+0avgdata 828maxresident)k 0inputs+81952outputs(0major+240minor)pagefaults 0swaps 9.[root@localhost ~]# iostat-x Linux 2.6.32-573.el6.x86_64(localhost.localdomain)03/16/2016 _x86_64_(12 CPU)
avg-cpu: %user
%nice %system %iowait %steal
%idle
0.09
0.00
0.06
0.02
0.00
99.82
Device:
rrqm/s
wrqm/s
r/s
w/s
rsec/s
wsec/s avgrq-sz avgqu-sz
await svctm %util sda
8.30
68.47
7.61
2.27
363.21
565.82
94.05
0.05
5.32
0.40
0.39 各個(gè)性能指標(biāo)的簡單說明。rrqm/s 每秒進(jìn)行merge的讀操作數(shù)目。wrqm/s 每秒進(jìn)行merge的寫操作數(shù)目。r/s 每秒完成的讀I/O設(shè)備次數(shù)。w/s 每秒完成的寫I/O設(shè)備次數(shù)。rsec/s 每秒讀扇區(qū)數(shù)。wsec/s 每秒寫扇區(qū)數(shù)。rkB/s 每秒讀K字節(jié)數(shù)。wkB/s 每秒寫K字節(jié)數(shù)。avgrq-sz平均每次設(shè)備I/O操作的數(shù)據(jù)大小(扇區(qū))。avgqu-sz平均I/O隊(duì)列長度。await平均每次設(shè)備I/O操作的等待時(shí)間(毫秒)。svctm平均每次設(shè)備I/O操作的服務(wù)時(shí)間(毫秒)。%util 一秒中有百分之多少的時(shí)間用于I/O操作,或者說一秒中有多少時(shí)間I/O隊(duì)列是非空的。
平均單次IO大小(IO Chunk Size)<=>avgrq-sz
平均IO響應(yīng)時(shí)間(IO Response Time)<=>await
IOPS(IO per Second)<=> r/s + w/s
吞吐率(Throughtput)<=> rkB/s + wkB/s
10.fio是一個(gè)非常靈活的io測試工具,他可以通過多線程或進(jìn)程模擬各種io操作。
fio分順序讀,隨機(jī)讀,順序?qū)懀S機(jī)寫,混合隨機(jī)讀寫模式。參數(shù):
filename: 指定文件(設(shè)備)的名稱。可以通過冒號分割同時(shí)指定多個(gè)文件,如filename=/dev/sda:/dev/sdb。
directory: 設(shè)置filename的路徑前綴。在后面的基準(zhǔn)測試中,采用這種方式來指定設(shè)備。
name: 指定job的名字,在命令行中表示新啟動一個(gè)job。
direct: bool類型,如果設(shè)置成true(1),表示不使用io buffer。
ioengine: I/O引擎,現(xiàn)在fio支持19種ioengine。默認(rèn)值是sync同步阻塞I/O,libaio是Linux的native異步I/O。
iodepth: 如果ioengine采用異步方式,該參數(shù)表示一批提交保持的io單元數(shù)。
rw: I/O模式,隨機(jī)讀寫,順序讀寫等等。
bs: I/O block大小,默認(rèn)是4k。
size: 指定job處理的文件的大小。
numjobs: 指定job的克隆數(shù)(線程)。
time_based: 如果在runtime指定的時(shí)間還沒到時(shí)文件就被讀寫完成,將繼續(xù)重復(fù)知道runtime時(shí)間結(jié)束。
runtime: 指定在多少秒后停止進(jìn)程。如果未指定該參數(shù),fio將執(zhí)行至指定的文件讀寫完全完成。
group_reporting: 當(dāng)同時(shí)指定了numjobs了時(shí),輸出結(jié)果按組顯示。
例: #順序讀
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=read-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest
#順序?qū)?/p>
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=write-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest
#隨機(jī)讀
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=randread-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest #隨機(jī)寫
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=randwrite-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest
#混合隨機(jī)讀寫
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=randrw-rwmixread=70-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=100-group_reporting-name=mytest-ioscheduler=noop
補(bǔ)充:
上次測試的三塊固態(tài)硬盤IO:
0.55到2K的小文件
[root@localhost 1]# fio-filename=/data/B/1/2-direct=1-iodepth 1-thread-rw=randrw-rwmixread=80-ioengine=psync-bsrange=512-2048-size=4G-numjobs=5-group_reporting-name=test-runtime=1200 test:(g=0): rw=randrw, bs=512-2K/512-2K, ioengine=psync, iodepth=1...test:(g=0): rw=randrw, bs=512-2K/512-2K, ioengine=psync, iodepth=1 fio 2.0.7 Starting 5 threads test: Laying out IO file(s)(1 file(s)/ 4096MB)Jobs: 5(f=5): [mmmmm] [100.0% done] [8319K/2060K /s] [9870 /2498 iops] [eta 00m:00s] test:(groupid=0, jobs=5): err= 0: pid=29601
read : io=11152MB, bw=9515.1KB/s, iops=9183 , runt=1200079msec
clat(usec): min=0 , max=1000.3K, avg=468.07, stdev=1981.20
lat(usec): min=0 , max=1000.3K, avg=468.42, stdev=1981.20
clat percentiles(usec):
| 1.00th=[ 189], 5.00th=[ 211], 10.00th=[ 225], 20.00th=[ 249],| 30.00th=[ 274], 40.00th=[ 294], 50.00th=[ 318], 60.00th=[ 350],| 70.00th=[ 382], 80.00th=[ 430], 90.00th=[ 516], 95.00th=[ 596],| 99.00th=[ 844], 99.50th=[ 5088], 99.90th=[32128], 99.95th=[42240],| 99.99th=[58624]
bw(KB/s): min= 159, max= 6607, per=20.03%, avg=1905.53, stdev=328.56
write: io=2789.3MB, bw=2379.2KB/s, iops=2297 , runt=1200079msec
clat(usec): min=0 , max=1000.2K, avg=283.77, stdev=1432.42
lat(usec): min=0 , max=1000.2K, avg=284.21, stdev=1432.42
clat percentiles(usec):
| 1.00th=[
89], 5.00th=[ 110], 10.00th=[ 137], 20.00th=[ 153],| 30.00th=[ 165], 40.00th=[ 175], 50.00th=[ 189], 60.00th=[ 207],| 70.00th=[ 239], 80.00th=[ 302], 90.00th=[ 386], 95.00th=[ 458],| 99.00th=[ 660], 99.50th=[ 1976], 99.90th=[20352], 99.95th=[27520],| 99.99th=[43264]
bw(KB/s): min=
60, max= 1769, per=20.03%, avg=476.50, stdev=87.73
lat(usec): 2=0.08%, 100=0.51%, 250=29.98%, 500=59.64%, 750=8.40%
lat(usec): 1000=0.63%
lat(msec): 2=0.10%, 4=0.11%, 10=0.19%, 20=0.08%, 50=0.23%
lat(msec): 100=0.03%, 250=0.01%, 500=0.01%, 1000=0.01%, 2000=0.01%
cpu
: usr=6.13%, sys=37.70%, ctx=101478124, majf=0, minf=24056
IO depths
: 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit
: 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued
: total=r=11021114/w=2757348/d=0, short=r=0/w=0/d=0
Run status group 0(all jobs):
READ: io=11152MB, aggrb=9515KB/s, minb=9515KB/s, maxb=9515KB/s, mint=1200079msec, maxt=1200079msec
WRITE: io=2789.3MB, aggrb=2379KB/s, minb=2379KB/s, maxb=2379KB/s, mint=1200079msec, maxt=1200079msec
Disk stats(read/write):
sda: ios=11020977/2758079, merge=0/69, ticks=4004421/515149, in_queue=4514919, util=98.00%
10M的大文件
[root@localhost 1]# fio-filename=/data/B/1/10-direct=1-iodepth 1-thread-rw=randrw-rwmixread=80-ioengine=psync-bs=10M-size=10G-numjobs=10
-group_reporting-name=test-runtime=1800 test:(g=0): rw=randrw, bs=10M-10M/10M-10M, ioengine=psync, iodepth=1...test:(g=0): rw=randrw, bs=10M-10M/10M-10M, ioengine=psync, iodepth=1 fio 2.0.7 Starting 10 threads test: Laying out IO file(s)(1 file(s)/ 10240MB)Jobs: 4(f=4): [_m___mm_m_] [99.0% done] [220.2M/104.9M /s] [21 /10 iops] [eta 00m:03s]]
test:(groupid=0, jobs=10): err= 0: pid=29618
read : io=81910MB, bw=270613KB/s, iops=26 , runt=309948msec
clat(msec): min=15 , max=1006 , avg=334.89, stdev=102.97
lat(msec): min=15 , max=1006 , avg=334.89, stdev=102.97
clat percentiles(msec):
| 1.00th=[ 123], 5.00th=[ 157], 10.00th=[ 200], 20.00th=[ 249],| 30.00th=[ 289], 40.00th=[ 318], 50.00th=[ 343], 60.00th=[ 363],| 70.00th=[ 383], 80.00th=[ 412], 90.00th=[ 449], 95.00th=[ 482],| 99.00th=[ 578], 99.50th=[ 766], 99.90th=[ 963], 99.95th=[ 979],| 99.99th=[ 1004]
bw(KB/s): min= 7076, max=64912, per=10.25%, avg=27750.67, stdev=7359.31
write: io=20490MB, bw=67694KB/s, iops=6 , runt=309948msec
clat(msec): min=24 , max=752 , avg=161.82, stdev=105.86
lat(msec): min=25 , max=753 , avg=162.61, stdev=105.84
clat percentiles(msec):
| 1.00th=[
27], 5.00th=[
33], 10.00th=[
34], 20.00th=[
51],| 30.00th=[
54], 40.00th=[ 103], 50.00th=[ 178], 60.00th=[ 206],| 70.00th=[ 233], 80.00th=[ 260], 90.00th=[ 297], 95.00th=[ 326],| 99.00th=[ 392], 99.50th=[ 416], 99.90th=[ 644], 99.95th=[ 725],| 99.99th=[ 750]
bw(KB/s): min= 7398, max=82447, per=29.87%, avg=20218.16, stdev=9671.17
lat(msec): 20=0.01%, 50=3.69%, 100=4.55%, 250=23.75%, 500=65.39%
lat(msec): 750=2.18%, 1000=0.42%, 2000=0.01%
cpu
: usr=0.61%, sys=6.94%, ctx=600392, majf=0, minf=12529
IO depths
: 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit
: 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued
: total=r=8191/w=2049/d=0, short=r=0/w=0/d=0
Run status group 0(all jobs):
READ: io=81910MB, aggrb=270612KB/s, minb=270612KB/s, maxb=270612KB/s, mint=309948msec, maxt=309948msec
WRITE: io=20490MB, aggrb=67694KB/s, minb=67694KB/s, maxb=67694KB/s, mint=309948msec, maxt=309948msec
Disk stats(read/write):
sda: ios=261982/65792, merge=0/96, ticks=40438645/1040942, in_queue=41479880, util=100.00%
第二篇:IO總結(jié)
輸入和輸出
IO分類輸入 和 輸出 流節(jié)點(diǎn)流 和 處理流字節(jié)流(byte)和 字符流(char)
輸入流
字節(jié)流
抽象基類 InputStream
讀取文件的 FileInputStream
緩沖流 BufferedInputStream
讀取各種java基本數(shù)據(jù)類型的 DataInputStream
讀取對象 ObjectInputStream
字符流
抽象基類 Reader
讀取文本文件的 FileReader
實(shí)現(xiàn)緩沖的 BufferedRead 讀取一個(gè)行 readLine();newline()輸出流
字節(jié)流
抽象基類 OutputStream
寫文件的 FileOutputStream
緩沖輸出流 BufferedOutputStream
寫各種java基本數(shù)據(jù)類型的 DataOutputStream
寫對象的 ObjectOutputStreamwriteObject(Object obj);字符流
對象的序列化
一個(gè)對象所屬的類如果實(shí)現(xiàn)java.io.Serializable
則這個(gè)類是序列化類,此類創(chuàng)建的對象就是序列化對象 序列化對象可以通過文件流在文件中進(jìn)行讀和寫。
第三篇:IO企業(yè)文化
IO的企業(yè)文化是什么:
【企業(yè)文化】
——企業(yè)定位
· 四個(gè)人每個(gè)人找十個(gè)標(biāo)的,各自去實(shí)驗(yàn),標(biāo)的領(lǐng)域的選取根據(jù)各自偏好和擅長。公司注冊成功后去尋找一個(gè)信托平臺,費(fèi)用為一個(gè)點(diǎn)的回報(bào)率。財(cái)務(wù)方面不用管信托平臺會代為管理,并且將財(cái)務(wù)報(bào)表予以公示
·托管公司 代理大陸客戶進(jìn)行港股操盤
——使命
·為客戶利益而努力進(jìn)取
·提高每位員工的公司榮譽(yù)感,自豪感。
·像對待技術(shù)創(chuàng)新一樣致力于成本創(chuàng)新。
·讓更多的人獲得更好,更穩(wěn)健的服務(wù)
·充分調(diào)動員工主觀能動性,主動完成好任務(wù)。
——核心價(jià)值觀
· 成就客戶—我們致力于每位客戶的滿意和成功。
· 尊重員工—我們致力于尊重每位員工的要求以及情感。
· 誠信正直—我們秉持信任、誠實(shí)和富有責(zé)任感,無論是對內(nèi)部還是外部。· 追求卓越—我們倡導(dǎo)每天學(xué)習(xí)一點(diǎn),開拓視野,每天爭做最佳最好。
——愿景
IO基于對行業(yè)的深厚理解,以及對優(yōu)秀的管理和文化基因的傳承,順應(yīng)時(shí)代的趨勢,爭取成為時(shí)代的領(lǐng)頭羊,在全球范圍內(nèi)打造高品質(zhì)的產(chǎn)品,讓消費(fèi)者充分享受卓越的IO服務(wù)。IO致力于發(fā)展成為一個(gè)自由民主的公司,一個(gè)可以自由討論,積極發(fā)出自己聲音的的公司,一個(gè)穩(wěn)健提升的企業(yè),為客戶、股東、員工和社會創(chuàng)造更多的價(jià)值,讓世界因IO更美好。
第四篇:磁盤調(diào)度[推薦]
操作系統(tǒng)課程設(shè)計(jì)
磁 盤 調(diào) 度 實(shí) 踐 報(bào) 告
姓名: 董宇超 班級:計(jì)算機(jī)一班 學(xué)號:0906010124
目錄:
? 實(shí)踐內(nèi)容 ? 實(shí)踐目的及意義 ? 功能設(shè)計(jì)及數(shù)據(jù)結(jié)構(gòu) ? 調(diào)試運(yùn)行及測設(shè)分析 ? 存在的問題及改進(jìn)設(shè)想 ? 實(shí)踐體會 ? 總結(jié) ? 參考文獻(xiàn)
正文:
1.實(shí)踐內(nèi)容:
? 假設(shè)磁盤只有一個(gè)盤面,并且磁盤是可移動頭磁盤。? 磁盤是可供多個(gè)進(jìn)程共 享的存儲設(shè)備,但一個(gè)磁盤每個(gè)時(shí)刻只能為一個(gè)進(jìn)程服務(wù)。當(dāng)有進(jìn)程在訪問 某個(gè)磁盤時(shí),其它想訪問該磁盤的進(jìn)程必須等待,直到磁盤一次工作結(jié)束。當(dāng)有多個(gè)進(jìn)程提出輸入輸出請求而處于等待狀態(tài)時(shí),可用電梯調(diào)度算法從若 干個(gè)等待訪問者中選擇一個(gè)進(jìn)程,讓它訪問磁盤。為此設(shè)置“驅(qū)動調(diào)度”進(jìn) 程。
? 由于磁盤與處理器是并行工作的,所以當(dāng)磁盤在為一個(gè)進(jìn)程服務(wù)時(shí),占有處理器的其它進(jìn)程可以提出使用磁盤(這里我們只要求訪問磁道),即動 態(tài)申請?jiān)L問磁道,為此設(shè)置“接受請求”進(jìn)程。
要求模擬電梯調(diào)度算法,對磁盤進(jìn)行移臂操作,編程實(shí)現(xiàn)。
2.實(shí)踐目的:
磁盤是高速、大容量、旋轉(zhuǎn)型、可直接存取的存儲設(shè)備。它作為計(jì)算機(jī) 系統(tǒng)的輔助存儲器,擔(dān)負(fù)著繁重的輸入輸出工作,在現(xiàn)代計(jì)算機(jī)系統(tǒng)中往往 同時(shí)會有若干個(gè)要求訪問磁盤的輸入輸出要求。
系統(tǒng)可采用一種策略,盡可能按最佳次序執(zhí)行訪問磁盤的請求。由于磁 盤訪問時(shí)間主要受尋道時(shí)間T的影響,為此需要采用合適的尋道算法,以降 低尋道時(shí)間。
本實(shí)驗(yàn)要求模擬設(shè)計(jì)一個(gè)磁盤調(diào)度程序,觀察調(diào)度程序的動態(tài)運(yùn) 行過程。通過實(shí)驗(yàn)理解和掌握磁盤調(diào)度的職能。
3.功能設(shè)計(jì):
由于程序簡單,沒有設(shè)計(jì)結(jié)構(gòu)體,只定義了一下變量:
int m=0;//記錄磁道數(shù)目
int n;//接受輸入的磁道號
int disk[1000];//保存磁道序列
int currenttrack;//當(dāng)前磁道號
int t;
int i=0,j=0,k=0;//循環(huán)參數(shù)
int option;//記錄尋到方向
int sum=0;//統(tǒng)計(jì)尋道長度
源代碼: #include
int n;//接受輸入的磁道號
int disk[1000];//保存磁道序列
int currenttrack;//當(dāng)前磁道號
int t;int i=0,j=0,k=0;//循環(huán)參數(shù)
int option;//記錄尋到方向
int sum=0;//統(tǒng)計(jì)尋道長度
printf(“請輸入當(dāng)前的磁道號:”);scanf(“%d”,¤ttrack);
printf(“n--------------------1.向磁道號增加的方向訪問--------------------”);printf(“n--------------------2.向磁道號減少的方向訪問--------------------”);printf(“n請選擇的當(dāng)前磁頭移動方向(1/2):”);scanf(“%d”,&option);
printf(“n請輸入磁道請求序列(0~999并以<-1>結(jié)束):n”);scanf(“%d”,&n);while(n!=-1){
disk[i]=n;
m++;i++;
scanf(“%d”,&n);}
/* 冒泡排序 使磁道請求序列從小到大排序 */ for(j=0;j for(i=0;i { if(disk[i]>disk[i+1]) { t=disk[i]; disk[i]=disk[i+1]; disk[i+1]=t; } } } /* 找到當(dāng)前磁道號在磁道請求序列中的排序位置 */ k=0;for(i=0;i k++;else break;} printf(“n--------------電梯算法調(diào)度后的磁盤調(diào)度序列-------------n”);/* 第一種: 當(dāng)前磁道號先向外再向里讀 */ if(option==1){ for(i=k;i printf(“%5d”,disk[i]);} for(i=k-1;i>=0;i--){ printf(“%5d”,disk[i]);} sum=2*(disk[m-1]-disk[k])+disk[k]-disk[0];printf(“n尋道長度為:%5d”,sum);} /* 第二種: 當(dāng)前磁道號先向里再向外讀 */ if(option==2){ for(i=k-1;i>=0;i--){ printf(“%d ”,disk[i]); sum+=disk[i];} for(i=k;i printf(“%5d”,disk[i]); sum+=disk[i];} sum=disk[m-1]-disk[k]+2*(disk[k]-disk[0]);printf(“n尋道長度為:%5d”,sum); } printf(“n”);} 4.調(diào)試運(yùn)行: 運(yùn)行開始后出現(xiàn)如下界面,舉例輸入5: 然后出現(xiàn): 1.先選擇1(按按磁道號增加的方向?qū)さ溃?/p> 接著輸入磁道序列,若要結(jié)束輸入,輸入-1即可: 然后出現(xiàn)如下尋道結(jié)果: 2.再選擇2(按按磁道號減少的方向?qū)さ溃?/p> 接著輸入磁道序列,若要結(jié)束輸入,輸入-1即可: 然后出現(xiàn)如下尋道結(jié)果: 5.存在的問題: 由于初次做操作系統(tǒng)模擬實(shí)驗(yàn),所以程序設(shè)計(jì)中存在很多問題,例如:由于電梯算法是從當(dāng)前的磁道號開始沿著預(yù)定的方向?qū)さ溃?dāng)本方向上的請求全部滿足時(shí),再反向?qū)さ溃浅绦蚰M過程中,進(jìn)程不能隨著尋道的同時(shí)添加新的進(jìn)程,使得電梯調(diào)度算法不能更好的體現(xiàn)。只能預(yù)先輸入一串請求,然后只對這一段請求尋道。 改進(jìn)之處:添加更高級的算法,使得請求能在尋道的同時(shí)加進(jìn)來。 還有一些簡單的已解決的問題,不一一列舉了。 6.實(shí)踐心得體會: 通過這次實(shí)踐學(xué)會了不少內(nèi)容,更深的理解了磁道調(diào)度的幾種算法,而且學(xué) 會了系統(tǒng)的編寫程序。在編程過程中,需要 查閱各種資料,并且學(xué)習(xí)前人的 編寫方法,找出優(yōu)劣,然后形成自己的思想,最終完成程序的編寫。 通過模擬磁盤調(diào)度的電梯調(diào)度算法,并比較與其他調(diào)度算法的不同,懂得了 各種算法在不同情況下的作用。選擇一個(gè)好的調(diào)度算法可以節(jié)約很多時(shí)間。 在模擬過程中出現(xiàn)過好多問題,有的解決了,有的還未解決,不管如何都是 一種收獲。 在最初的時(shí)候,由于程序編寫隱藏的錯誤,編譯沒有發(fā)現(xiàn),卻執(zhí)行不下 去,然后改正錯誤,修復(fù)漏洞,最終滿足實(shí)驗(yàn)要求。 7.總結(jié): 為期一周的操作系統(tǒng)實(shí)踐課結(jié)束了,編寫了電梯調(diào)度算法的磁盤調(diào)度模 擬程序。電梯調(diào)度尋道方式就像電梯運(yùn)行一樣,就是沿一個(gè)方向?qū)さ溃钡?滿足這一方向的所有請求,便反向?qū)さ馈T诔绦蛑刑砑恿藢さ篱L度的顯示,以便將電梯調(diào)度的效率與其他磁盤調(diào)度算法比較。 8.參考文獻(xiàn): 1.操作系統(tǒng)教程(第4版)????孫鐘秀 主編 高等教育出版社; 2.算法與數(shù)據(jù)結(jié)構(gòu)-C語言描述(第2版)??張乃孝 主編 高等教育出版社; 3.網(wǎng)絡(luò)資源; 配額管理 Windows Server 203 R2“文件服務(wù)器”的“配額管理”包括如下功能: (1)通過創(chuàng)建配額來限制允許卷或文件夾使用的空間,并在接近或達(dá)到配額限制時(shí)生成通知。 (2)生成應(yīng)用于卷或文件夾中所有現(xiàn)有文件夾以及以后創(chuàng)建的任何新子文件夾的自動配額。(2)定義配額模板,并且定義的配額模板可以很容易應(yīng)用于新的卷或文件夾以及可以在整個(gè)組織中使用。 Windows Server 2003 R2的“文件服務(wù)器”中的配額模板是非常靈活的,例如:(1)您可以為服務(wù)器上每個(gè)用戶的個(gè)人文件夾設(shè)置200 MB的限制,并在達(dá)到180 MB存儲空間時(shí)通知您和用戶。 (2)您可以為指定的用戶組的共享文件夾設(shè)置靈活的500 MB配額。達(dá)到此存儲限制時(shí),將通過電子郵件通知組中的所有用戶,存儲配額已臨時(shí)擴(kuò)展到520 MB,以便用戶可以刪除不必要的文件并符合預(yù)設(shè)的500 MB配額策略。 (3)可以在臨時(shí)文件夾達(dá)到2 GB時(shí)接收通知,然而不限制該文件夾的配額,因?yàn)榉?wù)器上運(yùn)行的服務(wù)需要。 按照組件過程:添加刪除組件-管理監(jiān)視工具-文件服務(wù)管理+配額管理,就不一一的詳細(xì)敘述了。創(chuàng)建配額 在“文件服務(wù)器”中創(chuàng)建配額的步驟如下: (1)雙擊“文件服務(wù)器資源管理器”展開,如圖4-16所示。 圖4-16 文件服務(wù)器資源管理器窗口 (2)在如圖4-16所示的窗口中雙擊“配額管理”將其展開,右擊“配額”選項(xiàng),如圖4-17,在展開的快捷菜單中選擇“創(chuàng)建配額”命令,打開“創(chuàng)建配額”對話框,如圖4-18所示。 圖4-17 選擇創(chuàng)建配額選項(xiàng) 圖4-18 打開創(chuàng)建配額對話框 (3)在“配額路徑”文本框中,選擇或鍵入將應(yīng)用該配額的文件夾的路徑。注意,配額屬性還將應(yīng)用于其所有的子文件夾。選中“在路徑上創(chuàng)建配額”單選按鈕,在“配額屬性”選項(xiàng)組中的“從此配額模板派生屬性”下拉列表中選擇其配額屬性。本例中選擇“100 MB限制”,如圖4-19所示。單擊“創(chuàng)建”按鈕完成配額的創(chuàng)建,如圖4-20所示。 圖4-19 設(shè)置配額路徑和屬性 圖4-20 完成配額的創(chuàng)建 (4)在圖4-19所示的窗口中,從“配額屬性”選項(xiàng)組上選中“定義自定義配額屬性”單選按鈕,單擊“自定義屬性”按鈕,打開“配額屬性”對話框,如圖4-21所示。單擊“確定”按鈕,打開“將自定義屬性另存為模板”對話框。鍵入模板名(如:dfs1),如圖4-22所示。 圖4-21 自定義配額屬性 圖4-22 輸入模板名 (5)單擊“確定”按鈕,完成配額的創(chuàng)建,如圖4-23所示。 圖4-23 完成配額創(chuàng)建并生成配額模板 2創(chuàng)建配額模板 “文件服務(wù)器”中提供的配額模板是有限的,如果模板不能滿足需求,可以創(chuàng)建新的模板,方法如下: (1)在圖4-23所示的窗口中,右擊“配額模板”,在展開的快捷菜單中選擇“創(chuàng)建配額模板”命令,如圖4-24所示。將打開“創(chuàng)建配額模板”對話框,在“從配額模板復(fù)制屬性”中的下拉列表中選擇“100 MB 限制”,在“設(shè)置”選項(xiàng)卡中“模板名”文本框中鍵入模板名,本例用“dfs1”。在“空間限制”選項(xiàng)組中“限制”文本框中鍵入空間大小,如150,下拉列表中選擇“MB”。選中“硬配額”單選按鈕,如圖4-25所示。 圖4-24 選擇創(chuàng)建配額模板選項(xiàng) 圖4-25 打開創(chuàng)建配額模板對話框 (2)在“通知閥值”選項(xiàng)組中單擊“添加”按鈕,打開“添加閥值”對話框,如圖4-26所示。在“電子郵件”選項(xiàng)卡中,選中“將電子郵件發(fā)送到下列管理員”復(fù)選框,在下列文本框中鍵入管理員郵件地址,如hanxiaoqi129@sohu.com;若想要將電子郵件發(fā)送到時(shí)超出該閥值的用戶,可選中“將電子郵件發(fā)送到超出該閥值的用戶”復(fù)選框。單擊“其它電子郵件標(biāo)題”按鈕,打開“其他電子郵件標(biāo)題”對話框,鍵入發(fā)件人地址,如qiling8139@163.com,抄送地址和密件抄送地址,如圖4-27所示。 如圖4-26 打開添加閥值對話框 如圖4-27 輸入郵件地址 (3)在“事件日志”選項(xiàng)卡中,選中“將警告發(fā)送至事件日志”復(fù)選框,在“警告消息”選項(xiàng)組中,可編輯默認(rèn)的日志項(xiàng),本例中使用默認(rèn),如圖4-28所示。 圖4-28 設(shè)置“事件日志”選項(xiàng)卡 (4)在“命令”選項(xiàng)卡中,選中“運(yùn)行該命令或腳本”復(fù)選框,指定在達(dá)到閾值時(shí)是否運(yùn)行命令或腳本,在“命令安全”選項(xiàng)組中,可指定運(yùn)行該命令的安全級別,如圖4-29所示。 圖4-29 設(shè)置“命令”選項(xiàng)卡 (5)在“報(bào)告”選項(xiàng)卡中,選中“生成報(bào)告”復(fù)選框,在“選擇要生成的報(bào)告”中的下拉列表中選擇“按所有者分類的文件”、“按文件組分類的文件”“大文件”等復(fù)選框,查看所選報(bào)告可單擊“查看所選報(bào)告”按鈕,將打開“查看所選報(bào)告”對話框,如圖4-13所示。選中“將報(bào)告發(fā)送至下列管理員”復(fù)選框,在“將報(bào)告發(fā)送至下列管理員”文件框中鍵入管理員電子郵件地址,本例中使用hanxiaoqi129@sohu.com,如有多個(gè)郵件地址用分號分隔,若想把生成的報(bào)告發(fā)送至超出閥值的用戶,可選中“把報(bào)告發(fā)送至超出閥值的用戶”復(fù)選框,如圖4-30所示。 如圖4-30 設(shè)置“報(bào)告”選項(xiàng)組 (6)創(chuàng)建模板完成后,在圖4-30中單擊“確定”按鈕。 3創(chuàng)建自動配額 通過使用自動配額,可以為文件夾指定配額模板,并指定自動生成基于該模板的配額并應(yīng)用于現(xiàn)有的子文件夾以及以后創(chuàng)建的任何新子文件夾。例如,可以為按需求為漫游配置文件用戶或新用戶創(chuàng)建的文件夾定義自動配額。每次創(chuàng)建新文件夾時(shí),將使用其父文件夾的自動配額配置文件中定義的模板來為該文件夾自動生成新配額項(xiàng)。然后,可以在結(jié)果窗格中的“配額”節(jié)點(diǎn)下查看這些自動生成的配額項(xiàng),作為分別創(chuàng)建的配額查看,可以單獨(dú)進(jìn)行編輯和修改。 創(chuàng)建自動配額的步驟如下: (1)在圖4-17所示的窗口中,單擊“創(chuàng)建配額”命令,打開“創(chuàng)建配額”對話框,如圖4-18所示。在“配額路徑”文本框中,選擇或鍵入將應(yīng)用該配額的文件夾的路徑。本例中選擇“F:hjx”目錄,選中“在現(xiàn)有子文件夾和新的子文件中自動應(yīng)用模板并創(chuàng)建配額”單選按鈕,在配額屬性選項(xiàng)組中,選中“從此配額模板派生屬性”在其下拉列表中選擇配額屬性。本例中選擇“100 MB 限制”。如圖4-31所示。 圖4-31 設(shè)置配額路徑和屬性 (2)單擊“創(chuàng)建”按鈕,打開“文件服務(wù)器資源管理器”窗口,如圖4-32所示。 圖4-32 完成自動配額的創(chuàng)建 4編輯配額模板的屬性 在更改配額模板時(shí),可以選擇將這些更改擴(kuò)展到使用原始配額模板創(chuàng)建的配額上。可以選擇只修改那些仍與原始模板匹配的配額或從原始模板派生的所有配額,無論自創(chuàng)建后對配額進(jìn)行過任何修改都是如此。此功能通過提供一個(gè)可進(jìn)行所有更改的中心點(diǎn),簡化更新配額屬性的過程。 (1)在圖4-23所示的窗口中,雙擊“配額模板”項(xiàng),展開配額模板,在配額模板列表中選擇“dfs1”,右擊該模板,在彈出的快捷菜單中選擇“編輯模板屬性”命令,如圖4-33所示。將打開“編輯模板屬性”對話框,如圖4-34所示。 圖4-33 選擇“編輯模板屬性(P)?”命令 圖4-34 打開配額模板屬性對話框 (2)在“空間限制”選項(xiàng)組中的“限制”文本框中鍵入200,選中“軟配額 允許用戶超出限制(用于監(jiān)視)”單選按鈕,如圖4-35所示。 如圖4-35 修改配額模板屬性 (3)單擊“確定”按鈕,打開“更新從模板派生的配額”對話框,選中“僅將模板應(yīng)用于與原始模板匹配的派生配額”單選按鈕,如圖4-36所示。 如圖4-36 設(shè)置模板應(yīng)用范圍 (4)單擊“確定”按鈕,完成模板屬性的修改,如圖4-37所示。 如圖4-37 修改DFS1模板屬性 編輯自動配額模板的屬性 在更改自動配額時(shí),可以選擇將這些更改擴(kuò)展到自動配額路徑中現(xiàn)有的配額上。可以選擇只修改那些仍與原始自動配額匹配的配額或自動配額路徑中的所有配額,無論自創(chuàng)建后對配額進(jìn)行過任何修改都是如此。此功能通過提供一個(gè)可進(jìn)行所有更改的中心點(diǎn),簡化更新從自動配額派生的配額屬性的過程。 (1)在圖4-32所示的窗口中,雙擊“配額”展開“配額”項(xiàng),如圖4-38所示。在“配額”列表中選中“F:hjx*?”模板,右擊該模板,在彈出的快捷菜單中選擇“編輯配額屬性”命令,如圖4-39所示,打開“編輯自動應(yīng)用配額”對話框,如圖4-40所示。 圖4-38 展開配額選項(xiàng) 圖4-39 選擇編輯配額命令(2)在“編輯自動應(yīng)用屬性”選項(xiàng)組中的“從此配額模板派生屬性”的下拉列表中選擇“200 MB 限制,50 MB 擴(kuò)展”項(xiàng),如圖4-40所示。 圖4-40 修改自動應(yīng)用配額屬性 (3)單擊“確定”按鈕,打開“更新從自動應(yīng)用配額派生的配額”對話框,從中選中“僅將自動應(yīng)用配額應(yīng)用于原始自動應(yīng)用配額匹配的派生配額”單選按鈕,如圖4-41所示。單擊“確定”按鈕,完成自動配額模板的屬性的修改,如圖4-42所示。 圖4-41 選擇自動配額應(yīng)用范圍 圖4-42 顯示修改后模板信息第五篇:文件服務(wù)器磁盤配額管理