1. Trang chủ
  2. » Công Nghệ Thông Tin

Bộ nhớ vật lý

13 345 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Phần III Chương 7: Bộ nhớ vật 7 7 . . 1 1 M M ở ở đ đ ầ ầ u u Việc tổ chức và điều khiển bộ nhớ vật là một trong những yếu tố quan trọng nhất xác định cách xây dựng HĐH. Để thực hiện các chương trình hay truy nhập dữ liệu, chúng cần được nạp vào bộ nhớ vật lý. Bộ nhớ ngoài (bộ nhớ thứ cấp như ổ đĩa cứng) thường có dung lượng rất lớn và giá rẻ dùng để chứa chương trình và dữ liệu. 7 7 . . 2 2 T T ổ ổ c c h h ứ ứ c c b b ộ ộ n n h h ớ ớ Trước kia bộnhớ vật là tài nguyên đắt nhất. Do đó nó cần được tổ chức tốt để có thể sử dụng với hiệu quả cao nhất. Tổ chức bộ nhớ là cách mà chúng ta hình dung và sử dụng bộ nhớ vật lý. Ví dụ nhưchúng ta sẽ nạp vào bộ nhớ một chương trình hay nhiều chương trình cùng một lúc? Nếu nhưtrong bộ nhớ có một số chương trình thì mỗi chương trình sẽ được cấp vùng nhớ bằng nhau hay chia bộ nhớ thành các phần (section, part) với kích thước khác nhau. Chúng ta có cần đòi hỏi các chương trình ứng dụng được thiết kế để nạp vào phần bộ nhớ cố định hay cho phép nạp vào bất cứ vùng nào phù hợp. Chúng ta có cần mỗi chương trình nằm trong một vùng nhớ liên tục hay có thể chia chương trình thành các khối nằm trong các vùng nhớ bất kỳ. 7 7 . . 3 3 Đ Đ i i ề ề u u k k h h i i ể ể n n b b ộ ộ n n h h ớ ớ . . Không phụ thuộc vào cách tổ chức bộ nhớ, chúng ta cần giải quyết cần dùng các tiêu chuẩn nào để đạt được các thông số tối ưu. Các phương pháp điều khiển bộ nhớ xác định cách làm việc của bộ nhớ với tổ chức cụ thể nào đó trong các cách giải quyết khác nhau các vấn đề: chúng ta nạp chương trình vào chỗ nào, nêu như không còn đủ bộ nhớ trống thì chương trình nào đang nằm trong bộ nhớ sẽ phải đưa ra . 7 7 . . 4 4 P P h h â â n n l l ớ ớ p p b b ộ ộ n n h h ớ ớ Vào những năm 50/60 bộ nhớ vật rất đắt. Do đó việc chọn lựa kích thước bộ nhớ vật cần phải tính toán trước. Khách hàng không muốn mua lớn hơn anh ta có thể, mặt khác anh ta phải mua một số ít nhất nào đó để đảm bảo hoạt động của HH v s lng nh trc cỏc user. Vn l xỏc nh dung lng b nh ti thiu tho món bi toỏn v ng thi nm trong kh nng ti chớnh cho phộp. cú th chy chng trỡnh hay truy nhp d liu, chỳng cn phi c np vo b nh vt lý. Cỏc chng trỡnh v d liu cha cn cú th lu trong b nh ngoi, khi cn thit s c np vo b nh vt lý. B nh ngoi (a cng, .) thng r hn v cú dng lng ln hn nhng thi gian truy cp b nh vt li nhanh hn nhiu. Vớ d v tc truy cp, b nh vt lý: 60ns, HDD: 9ms. H thng vi cỏc lp b nh cú c tỡnh tn sut trao i chng trỡnh, d liu gia cỏc lp khỏc nhau tng i ln. S trao i ú cng lm hao ht ti nguyờn h thng vớ d thi gian BXL, . Vo nhng nm 60 xut hin thờm mt lp (ngoi b nh vt v b nh ngoi) na, ú l cache memory, cho phộp lm tng tc v hiu qu s dng b nh. Cache memory cú tc truy cp nhanh hn nhiu (15ns) so vi b nh vt lý. Nhng nú cng t hn nhiu, do ú trong h thng thụng thng dung lng cache khụng ln. Cache memory lm tng thờm mt lp trao i nhng chi phớ ú c bự li bi tc truy cp. V do ú tc ca c h thng c nõng lờn nhiu. Hỡnh v Cache Memory Physical Memory Secondary Memory Thời gian truy cập giảm Tốc độ truy cập tăng Giá thành tăng Dung l-ợng giảm BXL có thể truy cập trực tiếp mã lệnh, dữ liệu BXL không truy cập trực tiếp, cần nạp vào Physical Memory 77 55 CCỏỏcc cchhiinn llcc iiuu kkhhiinn bbnnhh m bo s dng tt cỏc ti nguyờn giỏ tr, chỳng cn c iu khin mt cỏch cú hiu qu. Cỏc chin lc iu khin b nh theo hng m bo s dng tt nht b nh vt lý, v chia theo cỏc hng sau: 1/ Chin lc la chn a- chin lc la chn theo yờu cu (demand fetch) b- chin lc la chn trc 2/ Chin lc phõn b 3/ Chiến lược loại ra Mục đích của chiến lược lựa chọn là xác định xem khi nào phải nạp block chương trình hay dữ liệu vào bộ nhớ vật lý. Trong nhiều năm người ta cho rằng cách tốt nhất là lựa chọn theo yêu cầu: theo đó block chương trình hay dữ liệu được nạp vào bộ nhớ khi chương trình đang hoạt động đòi hỏi đến. Bởi vì rằng nói chung khó mà nói trước được điều khiển sẽ được chuyển đến đâu (địa chỉ lệnh tiếp theo) và chi phí thêm gắn với việc dự đoán trước sẽ tăng đáng kể thời gian chờ. Còn ngày nay, nhiều nhà thiết kế tin rằng lựa chọn dự đoán trước hoàn toàn có thể đảm bảo tăng tốc độ của hệ thống. Các chiến lược phân bố có mục đích xác định xem chương trình mới sẽ được nạp vào vị trí nào của bộ nhớ. Chúng ta sẽ xem xét một số chiến lược như'first suitalbe' (chọn block đầu tiên phù hợp), 'most suitable' (chọn block phù hợp nhất) và 'least suitable' (block ít phù hợp nhất), theo kích thước các vùng trống. Các chiến lược loại bỏ xác định xem block chương trình hoặc dữ liệu nào sẽ bị loại ra khỏi bộ nhớ để giải phóng chỗ cho việc nạp chương trình hay dữ liệu. 77 66 PPhhâânn bbốốbbộộnnhhớớlliiêênn ttụụcc vv àà kkhhôônngg lliiêênn ttụụcc Trong các máy tính đầu tiên bộ nhớ được phân bố liên tục- tức là mỗi chương trình phải nằm trong một vùng nhớ. Chỉ sau khi xuất hiện khái niệm đa chương trình với phân đoạn thay đổi (variable partition multi programming) thì việc phân bố bộ nhớ không liên tục mới chứng tỏ sự hiệu quả của mình. Trong phân bố bộ nhớ không liên tục, chương trình được chia làm nhiều phân đoạn (block hay segment), và chúng có thể nằm tại các vùng nhớ khác nhau, không nhất thiết phải liền nhau. Về phía HĐH, việc đảm bảo phân bố bộ nhớ không liên tục là rất phức tạp, nhưng nó đem lại nhiều ưu thế: nếu bộ nhớ có nhiều vùng nhớ trống thay vì một vùng lớn thì HĐH vẫn có thể nạp và thực hiện chương trình mà trong trường hợp ngược lại sẽ phải chờ. 77 77 PPhhâânn bbốốbbộộnnhhớớlliiêênn ttụụcc đđốốii vvớớii mmộộtt uusseerr Trong các máy đầu tiên tại mỗi thời điểm chỉ có một user (một chương trình ứng dụng) và tất cả tài nguyên đều thuộc quyền của anh ta. Và tiền sử dụng máy được tính theo nguyên tắc đơn giản- bởi vì user toàn quyền sử dụng các tài nguyên do đó anh ta phải trả cho tất cả, không phụ thuộc việc chương trình của anh ta có sử dụng hết các tài nguyên hay không. Do đó cơchế tính tiền thực hiện theo thời gian máy đã sử dụng. Trong các hệ làm việc trong chế độ phân chia thời gian thì việc tính toán sử dụng các thuật toán phức tạp hơn nhiều. Đầu tiên mỗi user đều phải tự mình viết toàn bộ chương trình kể cả các hàm thực hiện vào/ra bằng ngôn ngữ máy. Sau đó thì phần lệnh thực hiện các thao tác vào/ra cơbản được đưa vào IOCS- hệ thống điều khiển vào/ra, và người dùng không phải viết lại các hàm vào/ra mà chỉ phải gọi các hàm tương ứng của hệ thống. Điều đó làm đơn giản và tăng hiệu quả lập trình và có thể cho rằng đó là bắt đầu sự phát triển khái niệm về OS hiện đại. Tổ chức bộ nhớ trong trường hợp phân bố liên tục đối với một người dùng được biểu diễn bằng h.7.2 Hình 7.2 OS Ch-¬ng tr×nh øng dông Vïng nhí trèng Thông thường thì kích thước chương trình phụ thuộc dung lượng bộ nhớ (hay không gian quản bởi HĐH), nếu kích thước chương trình nhỏ hơn kích thước bộ nhớ thì không có vấn đề nảy sinh, còn khi kích thước chương trình vượt quá thì sao? Nhờ cơchế overlay cho phép chúng ta có thể viết các chương trình lớn hơn giới hạn trên. Khái niệm của nó được thể hiện trong hình 7.3. Nếu nhưmodule nào đó của chương trình không hoạt động trong cả quá trình thực hiện chương trình thì nó hoàn toàn có thể được lưu trong bộ nhớ ngoài, khi cần thiết mới được nạp vào bộ nhớ vật và sau khi kết thúc nó lại được ghi ra bộ nhớ ngoài, giải phóng bộ nhớ vật cho module tiếp theo. Chế độ overlay cho phép lập trình viên thiết kế các chương trình lớn vượt qua hạn chế bộ nhớ. Nhưng việc thiết kế overlay module đòi hỏi nhiều công sức và trí tuệ. Các chương trình với cấu trúc overlay phức tạp rất khó thay đổi. Ngày nay chúng ta không còn phải dùng chếđộ overlay để vượt qua giới hạn về bộ nhớ do đã có các hệ thống với bộ nhớ ảo - virtual memory Hình 7.3 Cấu trúc overlay Phần ch-ơng trình, dữ liệu cần có trong suốt quá trình OS Vùng Overlay Module điều khiển Module Overlay 1 Module Overlay 2 Module Overlay 3 0 a b a b Bo v b nh trong h thng n nhim Trong h thng n nhim, user c cp vựng nh liờn tc v núi chung l cú quyn iu khin, truy nhp ton b b nh vt lý. Trong trng hp ny b nh thng chia lm 3 vựng: vựng cho HH, vựng cho chng trỡnh ng dng v vựng trng. Vn bo v b nh trong trng hp ny cng tng i n gin. Bo v b nh trong trng hp ny l bo v HH chng trỡnh ng dng khụng lm hng nú. Nu nhchng trỡnh hot ng khụng ỳng, iu ú cú th dn ti phỏ v HH, nu nhHH b hng n mc chng trỡnh khỏc ng dng khụng th tip tc hot ng thỡ ngi dựng ớt nht cng nhn thy, sa li v chy li chng trỡnh. Trong trng hp ny thỡ s cn thit bo v HH khụng phi l rừ rng. Nu trong trng hp khỏc, chng trỡnh ng dng phỏ hng HH mt cỏch 'tinh vi'. Vớ d nhnú 'vụ tỡnh' lm thay i mt hm vo/ra ca h thng. Khi ú chng trỡnh cú th vn hot ng nhng tt c kt qu cú th b mt. Cũn cú th xy ra trng hp ti t hn l h thng a ra kt qu sai m vic phỏt hin ra khụng d dng. Do ú rừ rng cn phi bo v HH. Vic bo v cú th thc hin bng thanh ghi biờn nm trong BXL (h.7.4) Hỡnh 7.4 Ch -¬ng tr×nh S Vïng nhí trèng XL T hanh ghi iªn Thanh ghi biên chứa địa chỉ thấp nhất của lệnh. Nếu nhưuser cố gắng truy nhập vào vùng của HĐH thì lệnh đó bị cấm và sẽ đưa ra thông báo lỗi. Tất nhiên, user cũng cần truy nhập đến HĐH, ví dụ nhưthực hiện các thao tác vào/ ra. Để phục vụ điều này user có thể dùng các lệnh đặc biệt, với chúng anh ta có thẻ yêu cầu dịch vụ nào đó của HĐH (ví dụ nhưngắt SVC) Trong trường hợp này OS thực hiện dịch vụ được yêu cầu và sau đó trả lại điều khiển cho chương trình ứng dụng. Với việc OS ngày càng phức tạp, cần phải có các cơchế tốt hơn để bảo vệ OS đối với user cũng nhưgiữa các user với nhau. 7 7 . . 8 8 Đ Đ a a c c h h ư ư ơ ơ n n g g t t r r ì ì n n h h v v ớ ớ i i c c á á c c đ đ o o ạ ạ n n c c ố ố đ đ ị ị n n h h ( ( f f i i x x e e d d p p a a r r t t i i t t i i o o n n m m u u l l t t i i p p r r o o g g r r a a m m m m i i n n g g ) ) Đối với các hệ thống đơn nhiệm và ngay cả hệ thống xử gói (packeg processing) thì vẫn bị lãng phí một phần đáng kể tài nguyên. Trên h.7.5 ta thấy rằng chương trình chỉ thực sự sử dụng BXL khi mà nó không thực hiện thao tác vào/ra. Sau khi bắt đầu thao tác vào/ra chương trình không thể tiếp tục cho đến khi kết thúc thao tác. Tốc độ thực hiện thao tác vào/ra thường chậm hơn nhiều so với tốc độ của BXL. Nhưvậy BXL bị bỏ phí trong suốt thời gian chờ thực hiện tác vụ vào/ra, và phần này chiếm đáng kể thời gian chung. Hình 7.5 Sử dụng BXL trong hệ thống đơn nhiệm Sö dông BXL cña øng dông tÝnh to¸n nhiÒu Sö dông BXL cña øng dông thùc hiÖn nhiÒu thao t¸c I/O chê kÕt thóc thao t¸c I/O BXL thùc sù ho¹t ®éng Cỏc nh thit k thy rng hon ton cú th tng hiu qu s dng BXL. H ó thc hin cỏc h thng a nhim, trong ú cỏc user cựng 'cnh tranh' cú c ti nguyờn. Chng trỡnh ang ch kt thỳc thao tỏc vo/ra s phi nhng BXL cho chng trỡnh ó sn sng hot ng (tt nhiờn nu cú chng trỡnh nhth). Do ú m bo kh nng cựng thc hin thao tỏc vo/ra v BXL- nõng cao hiu qu s dng BXL v c h thng. Cỏc u th ca multiprogramming ch cú th tn dng ht khi trong b nh cú nhiu chng trỡnh. Nh ú khi mt chng trỡnh thc hin thao tỏc vo/ra thỡ BXL cú th chuyn sang phc v chng trỡnh khỏc v thc hin tớnh toỏn vi thi gian tr nh nht. Khi chng trỡnh th hai gii phúng BXL thớ n chng trỡnh th ba khỏc li cú th sn sng s dng nú. Multiprogramming ũi hi dung lng b nh ln hn so vi trng hp n nhim nhng chi phớ ú c bự li bi vic s dng hiu qu cỏc ti nguyờn khỏc (BXL, thit b vo/ra) 7.8.1 Fixed partition multiprogramming (a nhim vi phõn on c nh) dch v np theo chng trỡnh theo a ch tuyt i Trong cỏc h a nhim u tiờn, b nh c chia thnh cỏc phn (phõn on) vi kớch thc c nh. Trong mi on ch cú th np mt chng trỡnh. Cũn BXL nhanh chúng chuyn t chng trỡnh ny sang chng trỡnh khỏc, do ú to ra hiu qu l tt c chng trỡnh dng nhc thc hin ng thi. Vic biờn dch chng trỡnh c thc hin bi assembler v compiler vi a ch tuyt i b gii hn bi vic chng trỡnh ch cú th chy trong mt phõn on c th (h.7.6) Hỡnh 7.6 hàng đợi các ứng dụng chỉ chạy trong phân đoạn 1 . . . . Phân đoạn 1 OS Phân đoạn 2 Phân đoạn 3 hàng đợi các ứng dụng chỉ chạy trong phân đoạn 2 . . . . hàng đợi các ứng dụng chỉ chạy trong phân đoạn 3 . . . . Nu nhchng trỡnh ó sn sng nhng phõn on ca nú ó cú chng trỡnh khỏc thỡ nú phi i dự rng cỏc phõn on khỏc cú th trng (h.7.7). iu ny dn ti s lóng phớ b nh nhng vic thit k OS li tng i n gin. Trờn hỡnh 7.7 th hin tỡnh hung xu nht ca phng phỏp phõn b b nh liờn tc vi phõn on c nh v chng trỡnh c dch v np vo a ch tuyt i (phõn on c nh). C hai phõn on mt v hai u b phớ cũn hng ch ca phõn on ba quỏ nhiu trong khi chỳng ó cú th c np vo phõn on mt v hai. Hỡnh 7.7 hàng đợi các ứng dụng chỉ chạy trong phân đoạn 1 . . . . Phân đoạn 1 (trống) OS Phân đoạn 2 (trống) Phân đoạn 3 (bận) hàng đợi các ứng dụng chỉ chạy trong phân đoạn 2 . . . . hàng đợi các ứng dụng chỉ chạy trong phân đoạn 3 task A task B task C task D . . . . 7.8.2 a nhim vi phõn on c nh: dch v np chng trỡnh cỏc module t do. Cỏc chng trỡnh dch, assembler v loader t do c s dng dch v np cỏc chng trỡnh cú th thc hin ti bt c phõn on trng no ln (hỡnh 7.8). Phng phỏp ny khc phc c mt s nhc im v s dng b nh trong trng hp trc (a nhim vi phõn on c nh, dch v np chng trỡnh theo a ch tuyt i). Nhng t c iu ú, vic thit k li phc tp hn nhiu. Hỡnh 7.8 Phân đoạn 1 OS Phân đoạn 2 Phân đoạn 3 hàng đợi tất cả các ứng dụng task A task B task C task D . . . . ứng dụng có thể đ-ợc nạp vào phân đoạn trống bất kỳ 7.8.3 Bo v b nh trong cỏc h a nhim Trong cỏc h thng a nhim vi phõn b b nh liờn tc (contiguous memory allocation), thng ngi ta s dng cỏc thanh ghi biờn bo v b nh. Hai thanh ghi ch ra cn di v cn trờn ca phõn on, hoc mt cn v kớch thc ca phõn on; chng trỡnh cú yờu cu truy nhp n cỏc dch v ca OS phi dựng ngt SVC yờu cu. Hỡnh 7.9 Ph©n ®o¹n 1 OS Ph©n ®o¹n 2 0 a b d BXL b cËn d-íi Ph©n ®o¹n 3 c c 2 cËn trªn sè hiÖu curent process B¶o vÖ bé nhí trong hÖ ®a nhiÖm ph©n ®o¹n cè ®Þnh 7.8.4 Vấn đề chia nhỏ bộ nhớ (fragmentation) trong đa chương trình với phân đoạn cố định Fragmentation xảy ra trong bất kỳ hệ thống nào không phụ thuộc vào tổ chức bộ nhớ. Trong các hệ đa nhiệm với các phân đoạn cố định, fragmentation xảy ra do các chương trình ứng dụng không chiếm hết toàn bộ phân đoạn của nó hoặc là do các phân đoạn quá nhỏ để có thể nạp các chương trình đang chờ vào đó. 77 99 ĐĐaa nnhhiiệệmm vvớớii ccáácc pphhâânn đđooạạnn tthhaayy đđổổii Khi xem xét các vấn đề của đa nhiệm với phân đoạn cố định, các kỹ sưthiết kế OS thấy rằng tốt hơn là cho phép các chương trình chỉ chiếm bộ nhớ kích thước vừa đủ kích thước nó cần. Không chia bộ nhớ thành các đoạn cố định mà có kích thước thay đổi theo chương trình ứng dụng. Phương pháp đó gọi là đa nhiệm với các phân đoạn thay đổi. Sự phân bố bộ nhớ ban đầu được thể hiện trong h.7.10 Chúng ta chỉ xem xét phương pháp phân chia bộ nhớ liên tục tức là mỗi chương trình nạp vào vùng nhớ liên tục. Trong phương pháp đa nhiệm với các phân đoạn thay đổi chúng ta không đề ra bất cứ giả sử gì về chương trình (trừ khi kích thước của chúng không vượt quá kích thước bộ nhớ). Các chương trình khi được nạp (thực hiện) sẽ được cấp vùng nhớ chúng cần. Mỗi phân đoạn có kích thước đúng bằng kích thước chương trình nằm trong đó. Hình 7.10 App C: 20k App D: 14k App B: 10k App A: 15k OS App A: 15k Free Memory OS App A: 15k Free Memory App B: 10k OS App A: 15k Free Memory App B: 10k App C: 20k OS App A: 15k Free Memory App B: 10k App C: 20k App D: 14k Mỗi sơđồ tổ chức bộ nhớ đều có sự lãng phí nhất định. Trong trường hợp đa nhiệm với các phân đoạn thay đổi, sự lãng phí này xuất hiện khi các chương trình kết thúc và trong bộ nhớ xuất hiện các vùng trống (hole) nhưh.7.11. Các vùng trống này có thể sử dụng để nạp các chương trình khác nhưng dù sao vẫn sẽ còn các vùng trống vì không phải các chương trình đều có kích thước đúng bằng vùng trống. Nhưvậy đa nhiệm với các phân đoạn thay đổi vẫn không tránh khỏi lãng phí bộ nhớ. Hình 7.11 App D: 14k OS App A: 15k Free Memory App B: 10k App C: 20k App D: 14k OS Hole Free Memory App B: 10k App C: 20k App A kÕt thóc & gi¶i phãng bé nhí App D: 14k OS Hole Free Memory App B: 10k Hole App C kÕt thóc & gi¶i phãng bé nhí 7.9.1 Hợp nhất các vùng trống liền nhau Để khắc phục tình trạng bộ nhớ bị chia nhỏ chúng ta có thể dồn các vùng nhớ trống kể nhau. Trong đa nhiệm với các phân đoạn thay đổi, khi một chương trình kết thúc chúng ta có thể kiểm tra xem vùng được giải phóng có nằm liền kề với vùng trống khác không? Nếu tồn tại thì chúng ta có thể hoặc đưa thêm vào danh sách các phân đoạn . lưu trong bộ nhớ ngoài, khi cần thiết mới được nạp vào bộ nhớ vật lý và sau khi kết thúc nó lại được ghi ra bộ nhớ ngoài, giải phóng bộ nhớ vật lý cho module. chương trình hay truy nhập dữ liệu, chúng cần được nạp vào bộ nhớ vật lý. Bộ nhớ ngoài (bộ nhớ thứ cấp như ổ đĩa cứng) thường có dung lượng rất lớn và

Ngày đăng: 06/10/2013, 11:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w