Bài giảng Hệ thống máy tính - Chương 7: Bộ nhớ thực

Chia sẻ: Yi Yi | Ngày: | Loại File: PDF | Số trang:25

0
20
lượt xem
2
download

Bài giảng Hệ thống máy tính - Chương 7: Bộ nhớ thực

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Hệ thống máy tính - Chương 7 trang bị cho người học kiến thức cơ bản về bộ nhớ thực của máy tính. Nội dung trình bày trong chương gồm có: Các kiểu địa chỉ nhớ, chuyển đổi địa chỉ nhớ, overlay và swapping, vấn đề cấp phát bộ nhớ liên tục (contiguous memory allocation). Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Hệ thống máy tính - Chương 7: Bộ nhớ thực

Chapter 7: Boä Nhôù Thöïc<br /> <br /> <br /> <br /> <br /> <br /> Caùc kieåu ñòa chæ nhôù<br /> Chuyeån ñoåi ñòa chæ nhôù<br /> Overlay vaø swapping<br /> Vaán ñeà caáp phaùt boä nhôù lieân tuïc (contiguous memory<br /> allocation)<br /> <br /> <br /> <br /> Giaûi phaùp fixed partitioning<br /> Giaûi phaùp dynamic partitioning<br /> <br /> 1<br /> <br /> Quaûn lyù boä nhôù<br /> <br /> <br /> <br /> <br /> Kernel chieám moät vuøng coá ñònh cuûa boä nhôù, vuøng coøn laïi<br /> daønh ñeå caáp phaùt cho caùc process<br /> Caáp phaùt vuøng nhôù cho caùc process sao cho heä thoáâng<br /> hoaït ñoäng hieäu quaû<br /> <br /> <br /> <br /> <br /> Vd: Naïp caøng nhieàu process vaøo boä nhôù caøng toát ñeå gia taêng<br /> möùc ñoä multiprogramming<br /> <br /> Quaûn lyù boä nhôù<br /> <br /> <br /> <br /> <br /> <br /> Caáp phaùt vuøng nhôù cho caùc process<br /> Baûo veä: kieåm tra truy xuaát boä nhôù coù hôïp leä khoâng<br /> Chia seû: cho pheùp caùc process chia seû vuøng nhôù chung<br /> Chuyeån ñoåi ñòa chæ luaän lyù sang ñòa chæ vaät lyù<br /> <br /> 2<br /> <br /> Caùc kieåu ñòa chæ nhôù (1/2)<br /> <br /> <br /> <br /> <br /> <br /> <br /> Ñòa chæ vaät lyù -- physical (memory) address -- laø ñòa chæ<br /> maø CPU, hay MMU (neáu coù), göûi ñeán boä nhôù chính<br /> Ñòa chæ luaän lyù (logical address) laø ñòa chæ maø moät quaù<br /> trình sinh ra<br /> Caùc ñòa chæ sinh bôûi trình bieân dòch (compiler) laø<br /> töông ñoái hay khaû taùi ñònh vò (relocatable): compiler giaû thieát<br /> khoâng gian ñòa chæ cuûa ñôn vò bieân dòch (compilation unit) baét ñaàu<br /> töø ñòa chæ 0<br /> hoaëc<br />  tuyeät ñoái: keát quaû bieân dòch coù theå naïp ñöôïc ngay vaøo boä nhôù ñeå<br /> thöïc thi; ít ñöôïc duøng<br /> <br /> <br /> 3<br /> <br /> 1<br /> <br /> Caùc kieåu ñòa chæ nhôù (2/2)<br /> Khi moät leänh ñöôïc thöïc thi, caùc ñòa chæ luaän lyù phaûi ñöôïc<br /> chuyeån ñoåi thaønh ñòa chæ vaät lyù<br /> <br /> <br /> <br /> <br /> <br /> Söï chuyeån ñoåi naøy thöôøng coù söï hoã trôï cuûa phaàn cöùng ñeå ñaït<br /> hieäu naêng cao<br /> <br /> 4<br /> <br /> Töø maõ nguoàn ñeán file thöïc thi ñöôïc<br /> Linker: keát hôïp caùc object module thaønh moät file thöïc thi ñöôïc<br /> <br /> <br /> <br /> <br /> <br /> <br /> taùi ñònh vò ñòa chæ töông ñoái vaø phaân giaûi caùc external reference<br /> keát hôïp caùc object module thaønh moät load module (file nhò phaân khaû thöïc<br /> thi)<br /> System<br /> static linking<br /> library<br /> <br /> dynamic linking<br /> <br /> System<br /> library<br /> 5<br /> <br /> Thöïc hieän (static) linking<br /> Linker chuyeån ñoåi ñòa chæ töông ñoái sang ñòa chæ tuyeät ñoái<br /> <br /> <br /> 0<br /> <br /> Module A<br /> CALL B<br /> <br /> length L<br /> <br /> relocatable<br /> object modules<br /> <br /> L - 1 Return<br /> 0<br /> <br /> M-1<br /> 0<br /> <br /> Module A<br /> JMP “L”<br /> <br /> L - 1 Return<br /> L Module B<br /> <br /> Module B<br /> CALL C<br /> <br /> 0<br /> <br /> length M<br /> <br /> JMP “L+M”<br /> <br /> load module<br /> <br /> L  M - 1 Return<br /> <br /> Return<br /> <br /> LM<br /> <br /> Module C<br /> <br /> Module C<br /> length N<br /> L  M  N - 1 Return<br /> <br /> N - 1 Return<br /> 6<br /> <br /> 2<br /> <br /> Chuyeån ñoåi ñòa chæ<br /> <br /> <br /> <br /> <br /> Chuyeån ñoåi ñòa chæ: quaù trình aùnh xaï moät ñòa chæ töø khoâng<br /> gian ñòa chæ naøy sang khoâng gian ñòa chæ khaùc<br /> Bieåu dieãn ñòa chæ nhôù<br /> <br /> <br /> <br /> <br /> <br /> Trong source code: symbolic (caùc bieán, haèng, pointer…)<br /> Thôøi ñieåm bieân dòch: thöôøng laø ñòa chæ töông ñoái<br />  Ví duï: a ôû vò trí 14 byte so vôùi vò trí baét ñaàu cuûa module<br /> Thôøi ñieåm linking/loading: coù theå laø ñòa chæ tuyeät ñoái<br /> <br /> 2000<br /> <br /> 0<br /> <br /> int i;<br /> goto p1;<br /> p1<br /> <br /> 2250<br /> <br /> 250<br /> <br /> symbolic address<br /> <br /> relative address<br /> physical memory<br /> 7<br /> <br /> Sinh ñòa chæ tuyeät ñoái vaøo thôøi ñieåm bieân dòch<br /> Symbolic<br /> addresses<br /> PROGRAM<br /> <br /> Absolute<br /> addresses<br /> <br /> JUMP i<br /> <br /> i<br /> <br /> Physical memory<br /> addresses<br /> <br /> 1024<br /> <br /> 1024<br /> <br /> JUMP 1424<br /> <br /> JUMP 1424<br /> 1424<br /> <br /> LOAD j<br /> DATA<br /> <br /> j<br /> <br /> 1424<br /> LOAD 2224<br /> <br /> Compile<br /> <br /> LOAD 2224<br /> <br /> Load<br /> <br /> 2224<br /> <br /> Source code<br /> <br /> Absolute load module<br /> <br /> 2224<br /> <br /> Process image<br /> <br /> 8<br /> <br /> Chuaån bò sinh ñòa chæ vaät lyù (1)<br /> <br /> <br /> Vaøo thôøi ñieåm bieân dòch<br /> <br /> <br /> <br /> <br /> <br /> <br /> Compiler sinh ñòa chæ tuyeät ñoái<br /> Caàn thoâng tin cho bieát load module seõ ñöôïc naïp ôû ñaâu<br /> Khoâng caàn linker<br /> Loader raát ñôn giaûn<br /> Hieám ñöôïc duøng (MSDOS .COM files)<br /> <br /> 9<br /> <br /> 3<br /> <br /> Chuaån bò sinh ñòa chæ vaät lyù (2)<br /> <br /> <br /> Vaøo thôøi ñieåm link-edit<br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> Compiler<br />  Sinh ñòa chæ töông ñoái (a.k.a. relocatable) cho moãi ñôn vò bieân<br /> dòch<br />  Tham chieáu ñeán ñòa chæ ngoaøi<br /> Linkage editor<br />  Chuyeån ñoåi ñòa chæ relocatable sang ñòa chæ tuyeät ñoái<br />  Phaân giaûi caùc tham chieáu ñeán ñòa chæ ngoaøi<br />  Caàn thoâng tin cho bieát linked program seõ ñöôïc naïp ôû ñaâu<br /> Loader vaãn coøn raát ñôn giaûn<br /> Yeâu caàu veà phaàn cöùng thaáp<br /> Moät chöông trình chæ coù theå ñöôïc naïp taïi nôi ñaõ ñöôïc ñaëc taû vaø<br /> khoâng theå dòch chuyeån sau khi ñöôïc naïp<br /> Khoâng coøn ñöôïc duøng nhieàu<br /> 10<br /> <br /> Chuaån bò sinh ñòa chæ vaät lyù (3)<br /> <br /> <br /> Vaøo thôøi ñieåm naïp<br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> Töông töï thôøi ñieåm link-edit, nhöng khoâng giöõ coá ñònh ñòa chæ baét<br /> ñaàu<br /> Chöông trình coù theå ñöôïc naïp ôû baát cöù ñaâu<br /> Chöông trình coù theå dòch chuyeån nhöng khoâng taùch ñöôïc<br /> Chæ caàn phaàn cöùng ñôn giaûn: caùc thanh ghi base/limit<br /> Loader thieát laäp trò cho caùc thanh ghi base/limit<br /> Khoâng coøn ñöôïc duøng phoå bieán<br /> <br /> 11<br /> <br /> Sinh ñòa chæ vaät lyù<br /> <br /> <br /> Vaøo thôøi ñieåm thöïc thi<br /> <br /> <br /> <br /> <br /> <br /> Ñòa chæ ñöôïc chuyeån ñoåi ñoäng trong khi thöïc thi<br /> Caàn coù phaàn cöùng ñeå chuyeån ñoåi ñòa chæ aûo sang ñòa chæ vaät lyù<br /> ñöôïc nhanh<br />  “Phaân trang” (“paging”)<br />  “Phaân ñoaïn” (“segmentation”)<br /> Raát phoå bieán hieän nay<br /> <br /> 12<br /> <br /> 4<br /> <br /> Söû duïng vuøng nhôù bôùt phí phaïm<br /> <br /> <br /> Caùc kyõ thuaät hoã trôï söû duïng vuøng nhôù bôùt phí phaïm:<br /> <br /> <br /> <br /> <br /> <br /> Dynamic linking<br /> Dynamic loading<br /> Overlay<br /> Swapping<br /> <br /> 13<br /> <br /> Dynamic linking (1)<br /> Trong dynamic linking<br /> Vieäc link moät load module L ñeán moät module ngoaøi<br /> (external module) ñöôïc thöïc hieän sau khi ñaõ taïo xong L<br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> MS Windows: module ngoaøi laø caùc file .dll<br /> Unix: module ngoaøi laø caùc file .so (shared library)<br /> <br /> Load module chöùa caùc stub tham chieáu (refer) ñeán caùc<br /> routine cuûa external module<br /> <br /> <br /> <br /> <br /> Khi process goïi routine laàn ñaàu, stub seõ naïp routine vaøo boä nhôù<br /> (neáu routine chöa ñöôïc naïp tröôùc ñoù), thay theá ñòa chæ mình baèng<br /> ñòa chæ routine, vaø goïi routine ñeå thöïc thi<br /> Caùc laàn goïi routine sau seõ xaûy ra bình thöôøng, khoâng toán<br /> overhead<br /> <br /> 14<br /> <br /> Dynamic linking (2)<br /> <br /> <br /> Nhaéc laïi static linking<br /> <br /> 0x08048000<br /> <br /> program<br /> <br /> main:<br /> ...<br /> call printf<br /> <br /> printf:<br /> ...<br /> ret<br /> <br /> copy từ libc<br /> <br /> 15<br /> <br /> 5<br /> <br />

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản