Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

Kiến trúc hệ điều hành ios

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kiến trúc hệ điều hành ios

    KIẾN TRÚC HỆ ĐIỀU HÀNH IOS
    ( INTERNETWORK OPERATING SYSTEM )
    3.
    3.1. Định nghĩa IOS IOS viết tắt của từ Internetwork Operating System, là một hệ điều hành hoạt động trên phần cứng của router Cisco, nó điều khiển hoạt động định tuyến và chuyển mạch của một router Rên của hệ điều hành IOS thì gồm có 3 phần: aaaa-bbbb-cccc trong đó: - aaaa: dòng sản phẩm áp dụng hệ điều hành này - bbbb: các tính năng của IOS - cc: định dạng file IOS, nơi IOS chạy, kểu nén của IOS
    Ví dụ:tên một IOS: C3620-i-mz_113-8T1.bin
    3.2.
    Tổng quan về kiến trúc của IOS của Cisco Khi mà lợi ích của việc định tuyến qua mạng trở nên phát triển, đòi hỏi router phải hỗ trợ một số những giao thức và cung cấp những chức năng khác, như cầu nối giữa các mạng. Cisco đã thêm những tính năng mới cho phần mềm của router. Kết quả có nhiều chức năng cầu nối và định tuyến như ngày nay. Nhưng hầu như cấu trúc cơ bản của hệ điều hành vẫn giống như ban đầu. IOS thật sự là một cấu trúc đơn giản, cực nhỏ. IOS được thiết kế dựa vào những ràng buộc về bộ nhớ, về tốc độ, phần cứng của router. Hình 3.1: mô tả kiến trúc của một IOS của Cisco

    Hình 3.1 kiến trúc IOS của Cisco
    3.2.1. Các tiến trình (processes)
    Là những tuyến riêng lẻ kết hợp với dữ liệu để thực hiện những tác vụ, như duy trì hệ thống, chuyển mạch gói dữ liệu, thực hiện giao thức định tuyến…
    3.2.2. Nhân ( Kernel ) Cung cấp những dịch vụ cơ bản của hệ thống tùy thuộc vào IOS, như: quản lý bộ nhớ, lập lịch các tiến trình... Nó cung cấp quản lý tài nguyên phần cứng (CPU, bộ nhớ) cho các tiến trình.
    3.2.3. Bộ đệm gói ( Packet buffer ) Cung cấp các bộ đệm toàn cục và kết hợp với chức năng quản lý bộ đệm để lưu trữ gói dữ liệu đang được chuyển mạch.
    3.2.4. Trình điều khiển thiết bị ( Device drivers ) Làm chức năng điều khiển giao tiếp giữa phần cứng và thiết bị ngoại vi, giao tiếp giữa các tiến trình IOS, kernel, và phần cứng. Chúng cũng giao tiếp với các phần mềm chuyển mạch nhanh (fast switching software).
    3.2.5. Phần mềm chuyển mạch nhanh Chức năng chuyển mạch gói dữ liệu cao.
    3.3.
    Tổ chức bộ nhớ
    IOS ánh xạ toàn bộ bộ nhớ vật lý thành một không gian địa chỉ ảo phẳng rộng lớn. MMU ( memory map unit ) của CPU có giá trị khi được sử dụng để tạo không gian địa chỉ ảo thậm chí khi mà IOS không tận dụng một khối nhớ ảo trọn vẹn.
    3.3.1.
    Miền bộ nhớ (memory region) IOS chia không gian địa chỉ này thành những miền bộ nhớ gọi là region, mỗi region phù hợp với những loại bộ nhớ vật lý khác nhau. Ví dụ, SRAM có thể lưu trữ gói dữ liệu và DRAM có thể lưu trữ phần mềm hoặc dữ liệu. Phân lớp bộ nhớ thành các region cho phép IOS phân loại các loại bộ nhớ khác nhau vì vậy mà phần mềm không cần biết chi tiết về bộ nhớ trên mỗi platform (Nền về phần cứng). Các region được phân chia thành một trong tám mục như hình 3.2

    Hình 3. 2 các loại region
    Những region cũng có thể được đặt trong mối quan hệ cha con. Mặc dầu không có một áp đặt giới hạn trên chiều sâu của mối quan hệ này. Những region đặt trong quan hệ này là những subregion (miền con) của miền cha Hình 3.3: Hiển thị cách bố trí bộ nhớ ảo trên một platform điển hình, bao gồm những regionsubregion mà IOS có thể tạo

    Hình 3. 3 Region và subregion
    Bạn có thể dùng lệnh show region để hiện thị các region được định nghĩa trên hệ thống: router#show region Region Manager: Start End Size(b) Class Media Name 0x01A00000 0x01FFFFFF 6291456 Iomem R/W iomem 0x31A00000 0x31FFFFFF 6291456 Iomem R/W iomem: (iomem_cwt) 0x4B000000 0x4B0FFFFF 1048576 PCI R/W pcimem 0x60000000 0x619FFFFF 27262976 Local R/W main 0x600088F8 0x61073609 17214738 IText R/O main:text 0x61074000 0x611000FF 573696 idata R/W main:data 0x61100100 0x6128153F 1578048 IBss R/W main:bss 0x61281540 0x619FFFFF 7858880 Local R/W main:heap 0x7B000000 0x7B0FFFFF 1048576 PCI R/W pcimem: (pcimem_cwt) 0x80000000 0x819FFFFF 27262976 Local R/W main: (main_k0) 0xA0000000 0xA19FFFFF 27262976 Local R/W main: )main_k1) Được mô tả như sau: Tên của region, địa chỉ bắt đầu, địa chỉ kết thúc, và kích thước region đó. Ví dụ: Iomem R/W iomem 0x31A00000 0x31FFFFFF 6291456 (tên region iomem, địa chỉ bắt đầulà 0x31A00000, địa chỉ kết thúc là: 0x31FFFFFF, kích thước: 6291456 byte ) Bạn có thể thấy ở hình 1.2, toàn bộ DRAM từ địa chỉ 0x60000000 đến 0x619FFFFF được phân loại như là một region local và hơn nữa được chia thành các subregion. Những subregion này tương đương với những phần khác nhau của IOS (text, BSS, data) và heap.
    3.3.2.
    Vùng bộ nhớ: (memory pool)
    IOS quản lý bộ nhớ rỗi, thông qua một chuỗi các memory pool. Mỗi pool là một tập hợp các khối nhớ mà có thể cấp phát và thu hồi khi cần. Memory pool được xây dựng bên ngoài các region và được quản lý bởi kernel. Thường thì, pool tương đương với một region đặc biệt. Một memory pool có thể được xây dựng từ một vài region mở rộng, cho phép bộ nhớ được cấp phát và thu hồi từ các miền bộ nhớ khác nhau để tối đa hiệu quả hoạt động Bạn có thể dùng lệnh show memory để hiển thị các pool này
    router#show memory Head Total(b) Used(b) Free(b) Lowest(b) Largest(b) Processor 61281540 7858880 3314128 4544752 4377808 4485428 I/O 1A00000 6291456 1326936 4964520 4951276 4964476 PCI 4B000000 1048576 407320 641256 641256 641212 ...
    Mô tả như sau: (kích thước tính theo byte)
    -
    Total: kích thước của pool
    -
    Used: lượng bộ nhớ được cấp phát
    -
    Free: lượng bộ nhớ sẵn sàng để sử dụng
    - Lowest: lượng bộ nhớ thấp nhất sẵn sàng sử dụng từ khi mà pool được tạo
    - Largest: kích thước khối nhớ liên tục lớn nhất sẵn sàng sử dụng hiện tại.
    Lệnh show memory ở trên cung cấp ba pool với các tham số tương ứng: heap, processor và I/O
    3.4.
    Tiến trình IOS (processes IOS)
    3.4.1. Vòng đời của một tiến trình
    Một tiến trình có thể được tạo ra hoặc kết thúc bất cứ lúc nào trong khi IOS đang hoạt động ngoại trừ có ngắt xảy ra. Nó được tạo ra bởi kernel hoặc bỏi một tiến trình khác đang chạy khác.
    Một thành phần có trách nhiệm tạo nhiều tiến trình trong IOS gọi là parser (bộ phân tách). Parser này là một tập các chức năng làm phiên dịch cấu hình IOS và dòng lệnh EXEC. Parser được yêu cầu bởi kernel trong suốt quá trình khởi tạo IOS và các tiến trình EXEC, để cung cấp một giao tiếp dòng lệnh CLI thông qua giao tiếp console (giao tiếp người và máy) và các phiên telnet. Tại bất cứ thời điểm nào, một lệnh được nhập bởi người dùng hoặc một cấu hình được đọc từ file, parser phiên dịch dòng lệnh và đưa ra những hoạt động tức thời. Một vài lệnh cấu hình bởi việc gán giá trị, như địa chỉ IP, trong khi cấu hình khác như định tuyến hoặc giám sát. Một vài lệnh làm cho parser khởi tạo một tiến trình mới. Ví dụ: khi mà lệnh cấu hình router eigrp được nhập vào, parser khỏi tạo một tiến trình mới, gọi là ipigrp (nếu như tiến trình ipigrp đã được khởi tạo rồi), bắt đầu xử lý gói ip EIGRP. Nếu như lệnh cấu hình no router eigrpđược nhập vào, parser kết thúc tiến trình ipigrp và không còn chức năng định tuyến EIGRP. Tiến trình IOS thì trải qua một các trạng thái như sau: hình 3.4

    Hình 3. 4 Các trạng thái của một tiến trình IOS
    3.4.1.1. Trạng thái khởi tạo (Create)
    Khi mà một tiến trình mới được tạo, nó nhận vùng stack riêng của mình và vào trạng thái mới (new). Tiến trình có thể di chuyển đến trạng thái điều chỉnh (modify). Nếu không có thay đổi cần thiết, thì tiến trình chuyển sang trạng thái thực thi (Execute)
    3.4.1.2.
    Trạng thái điều chỉnh (modify)
    Không giống như hầu hết các hệ điều hành, IOS không tự động truyền tải các tham số khởi tạo hoặc gán một giao tiếp đến một tiến trình mới khi nó được tạo, bởi vì nó cho rằng hầu hết các tiến trình không cần tài nguyên này. Nếu một tiến trình cần nguồn tài nguyên này, tuyến mà tạo nó có thể điều chỉnh để thêm vào.
    3.4.1.3.
    Trạng thái thực thi (Execute)
    Sau khi một tiến trình mới được tạo thành công và điều chỉnh, nó chuyển sang trạng thái sẵn sàng (Ready) và vào trạng thái thực thi (Execute). Trong suốt trạng thái này, một tiến trình có thể truy cập CPU và chạy. Trong suốt trạng thái thực thi, một tiến trình có thể là một trong ba trạng thái: sẵn sàng, chạy, và rỗi (Idle). Một tiến trình ở trạng thái sẵn sàng sẽ đợi chuyển sang trạng thái truy cập CPU, và bắt đầu thực thi lệnh, một tiến trình ở trạng thái rỗi là đang ngủ, đợi sự kiện bên ngoài xuất hiện trước khi nó có thể chạy. Một tiến trình chuyển từ trạng thái sẵn sàng sang trạng thái chạy khi mà nó được lập lịch để chạy. Với đa tác vụ mà không ưu tiên (non-preemptive multitasking), một tiến trình được lập lịch chạy trên CPU cho đến khi tạm ngừng hoặc kết thúc. Một tiến trình có thể tạm dừng theo hai cách: nó có thể tự dừng bởi việc báo cho kernel, nó muốn nhường CPU, và chuyển sang trạng thái sẵn sàng, và đợi đến lúc chạy lại. Tiến trình cũng có thể dừng bởi một hoạt động bên ngoài xảy ra. Khi mà một tiến trình bắt đầu đợi một sự kiện,kernel hoàn toàn dừng tiến trìnhn này và chuyển nó sang trạng thái rỗi. Sau khi một sự kiện xảy ra rồi thì kernel chuyển tiến trình trở lại trạng thái sẵn sàng để đợi chạy lại.
    3.4.1.4.
    Trạng thái kết thúc (Terminal):
    Trạng thái cuối cùng trong vòng đời của tiến trình là trạng thái kết thúc. Một tiến trình vào trạng thái kết thúc khi nó hoàn thành chức năng của mình và đóng lại hoặc khi một tiến trình khác đóng nó. Khi một tiến trình bị đóng hoặc tự đóng, tiến trình chuyển sang trạng thái chết (Dead). Tiến tình này ỏ trạng thái chết (không hoạt động) cho đến khi kernel thu hồi tất cả các tài nguyên của nó. Sau khi tài nguyên được thu hồi, tiến trình bị kết thúc thoát khỏi trạng thái chết và được xóa khỏi hệ thống.
    3.4.2.
    Độ ưu tiên tiến trình IOS
    IOS thực hiện chế dộ ưu tiên để lập lịch các tiến trình trên CPU. Tại thời điểm tạo, mỗi tiến trình được gán một trong 4 độ ưu tiên dựa trên mục đích của tiến trình. Độ ưu tiên là không đổi, chúng được gán khi một tiến trình được tạo và không bao giờ thay đổi. Ta có các độ ưu tiên:
    -
    Critical:
    Dành riêng cho những tiến trình hệ thống thiết yếu mà giải quyết những vấn đề cấp phát tài nguyên
    -
    High:
    Được gán cho những tiến trình mà cung cấp thời gian đáp ứng nhanh, như tiến trình nhận gói trực tiếp từ giao tiếp mạng
    - Medium:
    Độ ưu tiên mặc định sử dụng bỏi hầu hết các tiến trình
    -
    Low:
    Được gán cho những tiến trình cung cấp những tác vụ mang tính định kỳ, như bảng ghi lỗi... Độ ưu tiên các tiến trình cung cấp sự ưu đãi cho một vài tiến trình để truy cập CPU dựa trên sự quan trọng của nó đối với hệ thống, nhớ rằng IOS không thực hiện quyền ưu tiên. Một tiến trình có độ ưu tiên cao hơn không thể ngắt một tiến trình có độ ưu tiên thấp hơn, thay vào đó, tiến trình có độ ưu tiên cao hơn thì có nhiều cơ hội hơn để truy cập CPU hơn.

    Last edited by lamvantu; 13-07-2011, 11:49 AM.
    Lâm Văn Tú
    Email :
    cntt08520610@gmail.com
    Viet Professionals Co. Ltd. (VnPro)
    149/1D Ung Văn Khiêm P25 Q.Bình thạnh TPHCM
    Tel: (08) 35124257 (5 lines)
    Fax (08) 35124314
    Tập tành bước đi....



  • #2
    3.5. Kernel IOS
    IOS kernel không là một đơn vị đơn mà là một tập các thành phần và chức năng liên kết chặt chẽ với nhau. IOS kernel thực hiện các chức năng sau: Lập lịch tiến trình, quản lý bộ nhớ, cung cấp dịch vụ routimes để trap (phát hiện ) và handle (điều khiển ) những ngắt phần cứng, duy trì timers (bộ định thời gian), và phát hiện ngoại lệ phần mềm. Các chức năng chính của kernel:
    3.5.1. Lập lịch
    Tác vụ lập lịch các tiến trình được thực hiện bởi scheduler ( bộ lập lịch ). Scheculer quản lý tất cả các tiến trình trong hệ thống bằng cách sử dụng một chuỗi các hàng đợi tiến trình mô tả trạng thái của mỗi tiến trình. Các hàng đợi này chứa nội dung thông tin cho tiến trình ở trạng thái đó. Tiến trình chuyển từ trạng thái này sang trạng thái khác khi mà scheduler duy chuyển ngữ cảnh của chúng từ 1 hàng đợi tiến trình này đến hàng đợi tiến trình khác. Có tất cả sáu hàng đợi tiến trình.
    - Idle queue: Chứa những tiến trình mà vẫn hoạt động nhưng đang đợi một sự kiện xảy ra trước khi có thể chạy.
    - Dead queue: Chứa các tiến trình đã kết thúc nhưng cần bị thu hồi tài nguyên trước khi có thể xóa chúng ra khỏi hệ thống.
    - Ready queues: Chứa các tiến trình mà có đủ điều kiện chạy, có 4 loại hàng đợi sẵn sàng, là một trong những độ ưu tiên của tiến trình: o Critical o High o Medium o Low Khi một tiến trình đang chạy bị tạm ngưng, scheduler lấy lại quyền điều khiển CPU và đưa ra một thuật toán để chọn tiến trình kế tiếp từ hàng đợi sẵn sàng. Các bước cho thuật toán như sau:
    Bước 1: scheduler đầu tiên kiểm tra các tiến trình đang đợi trong hàng đợi sẵn sàng có độ ưu tiên critical. Nó chạy mỗi tiến trình có độ ưu tiên critical, lần lượt, cho đến khi tất cả có cơ hội để chạy.
    Bước 2:
    sau khi tất cả cá tiến trình có độ ưu tiên critical có một cơ hội để chạy, scheduler kiểm tra hàng đợi có độ ưu tiên high, nếu không có tiến trình có độ ưu tiên high sẵn sàng, thì scheduler bỏ qua bước 2 và tới bước 3, và kiểm tra hàng đợi có độ ưu tiên medium. Mặc khác, scheduler xóa mỗi tiến trình có độ ưu tiên high từ hàng đợi và cho phép chạy. Giữa các tiến trình độ có ưu tiên high, scheduler kiểm tra bất cứ kỳ tiến trình độ ưu tiên critical mà đã sẵn sàng và chạy tất cả chúng trước khi xử lý tiến trình độ có độ ưu tiên high tiếp theo. Sau khi tất cả các tiến trình độ ưu tiên high có cơ hội, scheduler bỏ qua hàng đợi medium và low và trở về bước 1.
    Bước 3: sau khi không có tiến trình có độ ưu tiên high đang chờ để chạy, scheduler kiểm tra hàng đợi có độ ưu tiên medium. Nếu không có tiến trình có độ ưu tiên medium sẵn sàng, scheduler bỏ qua bước 3 và tới bước 4 và kiểm tra hàng đợi dộ ưu tiên low. Mặc khác, scheduler xóa mỗi tiến trình độ ưu tiên medium từ hàng đợi và cho phép nó chạy. Giữa mỗi tiến trình độ ưu tiên medium, sheduler kiểm tra bất kỳ các tiến trình độ ưu tiên high mà sẵn sàng và chạy tất cả chúng trước khi xử lý các tiến trình độ ưu tiên meidum tiếp theo. Sau khi các tiến trình độ ưu tiên medium có cơ hội, scheduler bỏ qua hàng đợi độ ưu tiên low, và bắt đầu lại bước1. Scheduler bỏ qua hàng đợi độ ưu tiên low tối đa là 15 lần trước khi đến bước 4. Scheduler này là bộ máy dự phòng đảm bảo an toàn để ngăn chặn sự cố, các tiến trình độ ưu tiên low không được sử dụng CPU.
    Bước 4: khi không có tiến trình có độ ưu tiên high hoặc medium chờ để chạy (hoặc hàng đợi độ ưu tiên low bị bỏ qua 15 lần) scheduler kiểm tra hàng đợi có độ ưu tiên low. Scheduler xóa mỗi tiến trình độ ưu tiên low từ hàng đợi và cho phép chạy, giữa các tiến trình độ ưu tiên low, scheduler kiểm tra bất cứ các tiến trình độ ưu tiên medium nào sẵn sàng và chạy chúng trước khi thực hiện các tiến trình độ ưu tiên low tiếp theo.
    Bước 5
    : Cuối cùng scheduler trở về bước 1 và bắt đầu lại.
    3.5.2.
    Quản lý bộ nhớ Bộ quản lý bộ nhớ của kernel, tại mức cao, quản lý tất cả các vùng nhớ có sẵn của IOS, bao gồm bộ nhớ chứa IOS của nó. Bộ quảnl ý bộ nhớ bao gồm ba thành phần riêng biệt, với những nhiệm vụ riêng. Ta có ba bộ quản lý bộ nhớ sau: Bộ quản lý region, Bộ quản lý pool, bộ quản lý chunk.
    3.5.2.1.
    Bộ quản lý region Định nghĩa và duy trì những region khác nhau trên một platform. Bộ quản lý region có chức năng duy trì tất cả các region. Nó cung cấp các dịch vụ cho phép những phần khác của IOS tạo region và gán các thuộc tính của chúng. Nó cũng cho phép những phần khác truy vấn những region có sẵn, vi dụ, quyết định tổng lượng bộ nhớ có sẵn trên môt platform. 1.5.2.2. Bộ quản lý pool Quản lý việc tạo ra các vùng nhớ pool, cấp phát và thu hồi các khối nhớ của pool Bộ quản lý pool là một thành phần quan trọng của kernel. Trong khi scheduler quản lý cấp phát tài nguyên CPU để xử lý, bộ quản lý pool quản lý cấp phát bộ nhớ cho các tiến trình. Tất cả các tiến trình phải thông qua bộ quản lý bộ nhớ pool, trực tiếp hoặc gián tiếp, để định ra vùng nhớ mà nó sử dụng. Bộ quản lý bộ nhớ được yêu cầu cho mỗi tiến trình sử hàm hệ thống chuẩn malloc và free để lấy và trả bộ nhớ. Bộ quản lý bộ nhớ hoạt động bởi việc duy trì danh sách khối nhớ rỗi cho mỗi pool, ban đầu, mỗi pool chứa chỉ một khối nhớ rỗi lớn bằng kích thước một pool, khi bộ quản lý pool yêu cầu bộ nhớ. Khởi tạo những khối nhớ có kích thứơc nhở hơn. tại cùng một thời điểm, các tiến trình có thể giải phóng vùng nhớ trả về pool, tạo thành một số vùng nhớ rỗi không liên tục nhau, nhiều kích thước. Trường hợp này gọi là phân mảnh bộ nhớ và đựơc cung cấp như hình 3.5.

    Hình 3. 5 Sự phân mảnh bộ nhớ
    Khi mà khối rỗi đựơc trả về cho một pool, bộ quản lý pool thêm vào kích thước của nó và bắt đầu địa chỉ một trong danh sách khối nhớ rỗi của pool. Mặc định bộ quản lý bộ nhớ duy trì danh sách các khối nhớ rỗi có kích thước sau: : 24, 84, 144, 204, 264, 324, 384, 444, 1500, 2000, 3000, 5000, 10,000, 20,000, 32,768, 65,536, 131,072, and 262,144 bytes. Những kích thước này không liên quan gì đến bộ đệm hệ thống.. Khi mà một tiến trình yêu cầu bộ nhớ từ một pool. Bộ quản lý bộ nhớ bắt đầu với danh sách rỗi kết hợp với kích thước yêu cầu. Phương thức này giúp tạo hiểu quả sử dụng bộ nhớ, phù hợp với yêu cầu để phục hồi khối dữ liệu mà gần với kích thước nhất. Nếu như không có khối nhớ rỗi phù hợp , bộ quản lý bộ nhớ tiếp tục với khối nhớ có kích thứơc lớn hơn. Cho đến khi tìm thấy. nếu như một khối nhớ rỗi đựơc tìm thấy trong một trong danh sách cao hơn, bộ quản lý bộ nhớ cắt khối nhớ đó và đặc nó trong vùng nhớ phù hợp bởi việc kết hợp thành một khối trả về cho khối mà nó gần kề với khối nhớ khác. Bộ quản lý bộ nhớ cố gắng điều khiển phân mảnh bởi kết hợp thành khối mà và nó là kế tiếp của một khối nhớ rỗi ,bộ quản lý bộ nhớ kết hợp hai khối nhớ thành một và thay thế trên danh sách vùng nhớ thích hợp. Như hình 3.6.

    Hình 3. 6 Kết hợp các khối nhớ
    1.5.2.3. Quản lý chunk Quản lý pool cung cấp nhiều cách hiệu quả để quản lý một tập các khối có kích thước khác nhau. Tuy nhiên, những tính năng này có chi phí của nó, bộ quản lý pool tạo 32 byte overhead trên mỗi bộ nhớ. Mặc dầu overhead này không quan trọng lắm đối với khối dữ liệu lớn, đối với pool có hàng ngàn khối dữ liệu nhỏ hơn thì overhead mới trở nên đáng quan tâm. Để tạo thêm sự lựa chọn thì kernel cung cấp bộ quản lý bộ nhớ khác gọi là bộ quản lý bộ nhớ chunk, nó có thể quản lý lượng lớn pool có nhiều khối nhớ nhỏ mà không có overhead Không giống như quản lý pool, bộ quản lý chunk không tạo ra những danh sách vùng nhớ rỗi với kích thước khác nhau, thay vào đó, bộ quản lý chunk quản lý một tập các khối nhớ cố định được chỉ định từ một trong các vùng nhớ pool. Trong một vài trường hợp, bộ quản lý chunk có thể được xem như là một bộ quản lý pool vùng nhớ con. Các chính sách thường được thực hiện là: một tiến trình yêu cầu một vị trí của một khối nhớ từ một vùng nhớ pool đặc biệt. Một tiến trình sau đó gọi đến bộ quản lý chunk để chia khối nhớ thành một chuỗi các chunk có kích thước cố định và nhỏ hơn và sử dụng bộ quản lý chunk để định ra những vùng nhớ rỗi khi cần. Thuật lợi ở đây là chỉ có 32 byte overhead và bộ quản lý pool thì không bắt buộc cấp phát và lấy lại hàng ngàn phân mảnh nhỏ hơn. Vì vậy, khả năng phần mảnh trong pool giảm đáng kể.
    1.5.2.4.
    Vấn đề cấp phát bộ nhớ Nếu yêu cầu bộ nhớ mà nó có lỗi, hoặc không đủ bộ nhớ để cấp phát thì sẽ xuất hiện thông báo như sau:
    %SYS-2-MALLOCFAIL: Memory allocation of 2129940 bytes failed from 0x6024C00C, pool I/O, alignment 32
    - 60232A40 6025A6C8 60CEA748 - 60CDD700 60CDF5F8 60CDF6E8 60CDCB40 60286F1C 602951 Cơ bản, có hai lý do gây ra lỗi này: - Không có đủ bộ nhớ rỗi - Bộ nhớ có sẵn nhưng nó bị phân mảnh vì vậy các khối nhớ không liên tục làm không đủ kích thước. Lỗi do thiếu bộ nhớ thường xảy ra bởi vì, thường không đủ bộ nhớ trên hệ điều hành để hổ trợ tất cả các hoạt động của hệ điều hành. Khi điều này xảy ra , bạn có hai lựa chọn : thêm bộ nhớ, hoặc giảm tính năng cấu hình, interface, cho đến khi vấn đề được giải quyết. Trong một vài trường hợp thì bộ nhớ lỗi có thể do lổ hổng được gọi là lổ hổng bộ nhớ ở một trong các tiến trình. Mục memory leak đề cập đến sự kiện một tiến trình tiếp tục chiếm giữ vùng nhớ nhưng không bao giờ giải phóng nó, cuối cùng là nó chiếm hết tất cả các bộ nhớ có sẵn. Lỗ hổng bộ nhớ thường bị gây bởi lỗi phần mềm.
    1.6.
    Quản lý bộ đệm gói Trong định tuyến gói dữ liệu, bất cứ hoạt động lưu trữ hay chuyển dữ liệu đều phải cần có một nơi để lưu trữ dữ liệu trong khi dữ liệu đang được định tuyến trên đường truyền. Thông thường thì tạo ra một bộ đệm để lưu giữ các gói đến trong khi hoạt động chuyển mạch đang hoạt động. Bởi vì khả năng định tuyến gói là trung tâm của cấu trúc hệ điều hành IOS. IOS chứa thành phần chuyên biệt để quản lý những vùng đệm này. Thành phần này được gọi là bộ quản lý vùng đệm bộ nhớ. IOS sử dụng thành phần này để tạo và quản lý nhất quán một chuỗi các vùng đệm cho chuyển mạch trên mỗi platform. Bộ đệm trong vùng này được biết chung là những bộ đệm hệ thống Bộ quản lý vùng bộ đệm cung cấp một cách tiện lợi để quản lý một tập các bộ đệm có kích thước cụ thể. Mặt dầu nó có thể được sử dụng để quản lý bất cứ loại bộ đệm nào, bộ quản lý bộ đệm được sử dụng chính để quản lý những vùng bộ đệm gói. Những vùng đệm gói được tạo từ các vùng nhớ pool có sẵn. Để tạo một vùng, bộ quản lý bộ đệm yêu cầu một khối nhớ từ bộ quản lý pool và chia cho bộ đệm. Bộ quản lý bộ đệm gói sau đó tạo một danh sách cho tất cả các bộ đệm rỗi và theo dõi các vùng nhớ này. Những vùng đệm có thể là động hay tĩnh, vùng bộ đệm tĩnh được tạo với số bộ đệm cố định, không thêm bộ đệm vào vùng bộ đệm tĩnh này. Vùng bộ đệm động được tạo với một số bộ đệm tối thiểu. Gọi là bộ đệm thường xuyên, có thể thêm hoặc xóa các bộ đệm. Với các vùng nhớ động, nếu bộ quản lý bộ đệm nhận được yêu cầu khi vùng nhớ rỗng, nó cố gắng mở rộng vùng nhớ và đáp ứng yêu cầu ngay lập tức. Nếu nó không thể mở rộng vùng nhớ, thì yêu cầu bị lỗi và thực hiện mở rộng vùng nhớ sau đó. Vùng bộ đệm được phân lớp public (dùng chung) hoặc private (dùng riêng). Vùng public, được sử dụng bởi bất cứ tiến trình của hệ thống, private được tạo cho một tập các tiến trình sử dụng.
    1.6.1.
    Bộ đệm hệ thống Mỗi IOS đều có một tập các bộ đệm public định trước gọi là những bộ đệm hệ thống, những bộ đệm này được sử dụng cho tiến trình chuyển mạch các gói dữ liệu và tạo gói (như gói keepalive, gói cập nhật định tuyến..).
    Bạn có thể dùng câu lệnh show buffer để hiển thị các vùng bộ đệm này
    router#>show buffer Buffer elements: 500 in free list (500 max allowed) 747314 hits, 0 misses, 0 created Public buffer pools: Small buffers, 104 bytes (total 50, permanent 50): 46 in free list (20 min, 150 max allowed) 530303 hits, 6 misses, 18 trims, 18 created 0 failures (0 no memory) Middle buffers, 600 bytes (total 25, permanent 25): 25 in free list (10 min, 150 max allowed) 132918 hits, 3 misses, 9 trims, 9 created 0 failures (0 no memory) Big buffers, 1524 bytes (total 50, permanent 50): 50 in free list (5 min, 150 max allowed) 47 hits, 0 misses, 0 trims, 0 created 0 failures (0 no memory) VeryBig buffers, 4520 bytes (total 10, permanent 10): 10 in free list (0 min, 100 max allowed) 26499 hits, 0 misses, 0 trims, 0 created 0 failures (0 no memory) Large buffers, 5024 bytes (total 0, permanent 0): 0 in free list (0 min, 10 max allowed) 0 hits, 0 misses, 0 trims, 0 created 0 failures (0 no memory) Huge buffers, 18024 bytes (total 0, permanent 0): 0 in free list (0 min, 4 max allowed) 0 hits, 0 misses, 0 trims, 0 created 0 failures (0 no memory) … Để hiểu được bộ quản lý vùng bộ đệm hoạt động như thế nào với bộ đêm hệ thống, xem ví dụ sau: Bắt đầu với 16 bộ đệm trong danh sách rỗi. Hình 3.7
    Small buffers, 104 bytes (total 16, permanent 16): 16 in free list (8 min, 16 max allowed) 0 hits, 0 misses, 0 trims, 0 created 0 failures (0 no memory)

    Hình 3. 7 bộ đệm hệ thống
    IOS nhận 8 gói phù hợp với 8 vùng bộ đệm small 104 byte. Phần mềm nhận gói yêu cầu và nhận 8 và nhận 8 bộ đệm từ vùng bộ đệm small. Lúc đó danh sách rỗi (free list) sẽ giảm xuống còn 8 như hình 3.8. Small buffers, 104 bytes (total 16, permanent 16): 8 in free list (8 min, 16 max allowed) 8 hits, 0 misses, 0 trims, 0 created 0 failures (0 no memory)

    Hình 3. 8 bộ đệm hệ thống
    Bây giờ IOS nhận thêm 4 gói nữa trước khi xử lý, Phần mềm nhận gói yêu cầu và nhận thêm 4 bộ đệm nữa từ vùng bộ đệm small. Small buffers, 104 bytes (total 16, permanent 16): 4 in free list (8 min, 16 max allowed) 12 hits, 4 misses, 0 trims, 0 created 0 failures (0 no memory) Số bộ đệm trong danh sách rỗi đã giảm còn 4 và có 12 đầy, miss là 4 do tối thiểu (min) là 8 mà chỉ còn 4. Như hình 3.9.

    Hình 3. 9 bộ đệm hệ thống
    Vì ở dưới mức tối thiểu nên bộ quản lý vùng bộ đệm, chạy tiến trình quản lý pool để mở rộng vùng nhớ, và tạo thêm bộ đệm. Sau khi tạo xong bộ đệm ta có thêm 4 vùng nhớ như hình 3.10
    Small buffers, 104 bytes (total 20, permanent 16): 8 in free list (8 min, 16 max allowed) 12 hits, 4 misses, 0 trims, 4 created 0 failures (0 no memory

    Hình 3. 10 bộ đệm hệ thống
    Bây giờ giả sử IOS yêu cầu thêm 9 gói nữa. Hình 3.11 Small buffers, 104 bytes (total 20, permanent 16): 0 in free list (8 min, 16 max allowed) 20 hits, 13 misses, 0 trims, 4 created 1 failures (0 no memory)

    Hình 3. 11 bộ đệm hệ thống
    Lúc này sẽ có một lỗi (failures), vì một gói bị tràn. Sau đó IOS xử lý gói và trả về bộ đệm hình 3.12 Small buffers, 104 bytes (total 20, permanent 16): 17 in free list (8 min, 16 max allowed) 20 hits, 13 misses, 0 trims, 4 created 1 failures (0 no memory)

    Hình 3. 12 bộ đệm hệ thống
    Bộ đệm rỗi lúc này là 17, tuy nhiên tối đa (max) cho phép là 16 cho nên tiến trình quản lý vùng bộ đệm hoạt động để rút lại bộ đệm. Như hình 3.13 Small buffers, 104 bytes (total 20, permanent 16): 17 in free list (8 min, 16 max allowed) 20 hits, 13 misses, 1 trims, 4 created 1 failures (0 no memory)

    Hình 3. 13 bộ đệm hệ thống
    Cuối cùng IOS xử lý tất cả các gói còn lại và trả bộ đệm về cho pool Small buffers, 104 bytes (total 16, permanent 16): 16 in free list (8 min, 16 max allowed) 20 hits, 13 misses, 4 trims, 4 created 1 failures (0 no memory)
    1.7. Trình điều khiển thiết bị IOS chứa trình điều khiển thiết bị cho các thiết bị phần cứng, như flash card, NVRAM, nhưng đáng chú ý là trình điều khiển cho các giao tiếp mạng Trình điểu khiển các giao tiếp mạng cung cấp những khả năng chính cho hoạt động của gói dữ liệu tại đầu ra của giao tiếp. Mỗi thiết bị chứa hai thành phần chính: thành phần điều khiển và thành phần dữ liệu. Thành phần điều khiển có trách nhiệm quản lý tình trạng và trạng thái của thiết bị (ví dụ, shut down trên một cổng). Thành phần dữ liệu có trách nhiệm đối với tất cả các luồng hoạt động chuyển mạch gói dữ liệu. Trình điều khiển thiết bị có quan hệ chặt chẽ với chức năng chuyển mạch gói Trình điều khiển thiết bị giao tiếp mạng dựa trên hệ thống IOS thông qua một cấu trúc điều khiển đặc biệt gọi là IDB( interface descriptor block). IDB chứa, toàn bộ chức năng điều khiển thiết bị, dữ liệu, trạng thái thiết bị, ví dụ: địa chỉ IP, trạng thái cổng, thống kê gói là một trong các trường hiện tại trong IDB. IOS duy trì một IDB cho mỗi giao tiếp hiện tại trên một platform
    1.8.
    Cấu trúc chuyển mạch gói Chuyển mạch gói là một trong các chức năng quan trọng nhất của router. Hoạt động bao quát như sau: - Một gói đến một cổng, - Địa chỉ đích của gói được kiểm tra và so sánh dựa và danh sách đích đã biết, - Nếu phù hợp, gói được chuyển tiếp ra cổng phù hợp, - Nếu không phù hợp, gói bị hủy. Rỏ ràng vấn đề chuyển mạch không quá phức tạp, nhưng để chuyện mạch được nhanh thì vấn đề trở nên phức tạp. Tốc độ hoạt động không chỉ dựa vào tốc độ CPU, còn có những nhân tố khác, khả năng thực thi của bus I/O, tốc độ bộ nhớ, đều có ảnh hưởng đến sự thực thi của chuyển mạch. Đây là một thử thách đối với các nhà phát triển IOS, làm thế nào để tốc độc chuyển mạch nhanh nhất mà có thể giới hạn trên các thành phần CPU, bộ nhớ, bus I/O. Khi mà kích thước và số mạng định tuyến tăng lên, những người phát triển IOS tiếp tục tìm ra những cách tốt nhất để giải quyết thử thách thực thi này. Đầu tiên thì IOS chỉ có chức năng chuyển mạch nhưng đã được cải thiện về sau, một vài phương thức chuyển mạch dựa trên tối ưu về phần cứng, một số khác trên kỹ thuật phần mềm để chạy trên nhiều platform khác nhau. Ngày nay IOS có thể chuyển mạch tới vài trăm ngàn gói trên một giây, sử dụng bạn định tuyến tới vài trăm ngàn tuyến đi. Sau đây là một vài phương thức chuyển mạch trên IOS phiên bản 12.0. - Process switching - Fast switching - Autonomous switching - Silicon switching engine (SSE) switching - Optimum switching - Distributed fast switching - Cisco Express Forwarding (CEF) - Distributed Cisco Express Forwarding (dCEF ) Chúng ta chỉ đi chi tiết phương thức: process switching
    1.8.1.
    Process switching Là phương thức chuyển mạch được thực hiện đầu tiên trên IOS. Cơ bản nó sử dụng brute-force để chuyển mạch. Mặc dầu Process switching có thể chiếm một lượng lớn CPU. Nhưng nó có ưu điểm là độc lập với phần cứng, làm cho nó trở nên phổ biến trên tất cả các sản phẩm của Cisco (tương thích với nhiều loại phần cứng). Nó cũng cung cấp một vài khả năng phân bố lưu lượng tải mà các loại chuyển mạch khác không có.
    1.8.1.1.
    Ví dụ Các bước thực hiện của Process switching: hình 3.14

    Hình 3. 14 Process switching
    Bước 1: Bắt đầu với một cổng trên router, nó nhận biết được có một gói trên đường truyền cần được xử lý. Cổng đó nhận gói và chuyển tới bộ nhớ I/O. Bước 2: Cổng sẽ gởi một ngắt tới bộ xử lý để báo cho bộ vi xử lý chính, rằng nó nhận được một gói và đang đợi trong bộ nhớ I/O cần được xử lý. Đây gọi là receive interrupt (nhận một ngắt). Phần mềm ngắt của IOS kiểm tra thông tin header (loại encapsulation, header lớp mạng, ...). xác định nó là gói IP, đặt nó gói trên hàng đợi input để thực hiện xử lý thích hợp. Đối với gói ip, tiến trình xử lý được đặt tên là ip_input Bước 3: Có ít nhất một gói trong hàng đợi, tiến trình ip_input đủ điều kiện để chạy. Bước 4 và 5: Sau khi tiến trình ip_input chạy. Hoạt động chuyển gói thực sự có thể bắt đầu. Trong ví dụ này: ip_input tìm trong bảng định tuyến xem có tồn tại đường đi tới địa chỉ ip đích không. Nếu như tìm thấy thì nó lấy địa chỉ của hop kế tiếp từ bản định tuyến. Sau đó nó tìm trong ARP cache để lấy thông tin cần thiết để tạo một địa chỉ mac mới cho hop kế tiếp. Tiến trình ip_input tạo một header có địa chỉ mac mới. Cuối cùng gói được đưa vào hàng đợi để truyền ra ngoài cổng được chọn. Bước 6: Khi mà cổng được chọn xác nhận, có một gói đang đợi để chuyển ra, thì nó lấy từ hàng đợi (từ bộ nhớ I/O) và truyền đi trên mạng. Bước 7: Sau khi cổng kết thúc việc truyền gói, nó sẽ báo cho bộ xử lý gói đã được truyền đi. IOS sau đó cập nhật biến đếm số gói đi ra ngoài và giải phóng vùng nhớ I/O 1.8.1.2. Phân bố lưu lượng tải với Process switching Một trong những ưu điểm của Process switching là khả năng phân bố lưu lượng tải trên gói. Lưu lượng tải trên gói, cung cấp một cách khá đơn giản trên nhiều link (liên kết) khi tồn tại nhiều đường tới đích. Khi có nhiều đường tới đích, các gói được chuyển mạch tự động được phân phối giữa giữa các đường có sẵn này dựa trên metric được gán cho mỗi đường. Metric hoặc cost cho mỗi đường trong bảng định tuyến được sử dụng để tính toán một biến đếm phân phối tải. Mà thật sự sử dụng để quyết định đường nào được chọn. Ví dụ: như hình 3.15

    Hình 3. 15 phân bố lưu lượng tải .
    Router A có hai đường đến mạng 10.1.4.0/24
    RouterA#show ip route 10.1.4.0 255.255.255.0
    Routing entry for 10.1.4.0/24 Known via "static", distance 1, metric 0 Routing Descriptor Blocks: 10.1.2.1 Route metric is 0, traffic share count is 1 * 10.1.3.1 Route metric is 0, traffic share count is 1 Trong vi dụ này, thì gói thứ nhất sẽ dùng hop tiếp theo là 10.1.3.1 và gói thứ hai 10.1.2.1, tiếp tục như vậy.
    1.8.1.3.
    Nhược điểm của process switch
    Nhược điểm của phương pháp này tốc độ của nó. Process switch yêu cầu bảng định tuyến cho mọi gói, khi kích thước bảng định tuyến tăng lên, thời gian yêu cầu tìm kiếm trong bảng định tuyến cũng tăng. Thời gian tìm kiếm tăng cũng là tăng thời gian sử dụng CPU, ảnh hưởng rất nhiều đến tốc độ gói đến. Mặc dầu điều này khó nhận thấy trong những mạng nhỏ, nhưng đối với những mạng lên tới hàng trăm, hàng ngàn node thì kích thước bảng định tuyến có ý nghĩa trong việc sử dụng CPU và sự tiềm ẩn về định tuyến (là thời gian giữa các gói đi vào và ra khỏi hệ thống). Một nhân tố ảnh hưởng đến Process switching là tốc độ di chuyển dữ liệu của bộ nhớ. Đối với một số hệ điều hành, Process switch yêu cầu các gói nhận được sao chép từ vùng nhớ I/O đến vùng nhớ khác trước khi chúng được chuyển mạch. Sau khi tiến trình định tuyến kết thúc, những gói phải được sao chép trở lại vùng nhớ I/O trước khi có thể truyền đi. Hoạt động này cần sự hoạt động mạnh mẽ của CPU, vì vậy mà đối với những hệ điều hành này, Process switch có thể thực thi rất chậm. Trở lại ví dụ trên, tiến trình ip_input cần có 3 thành phần khoá của dữ liệu để chuyển mạch gói. - Reachability (có đích đến): Có đích hay không, nếu có thì địa chỉ mạng của hop kế tiếp là gì để chuyển gói tới đích. Dữ liệu này trong bảng định tuyến
    - Interface ( cổng ): Cổng nào sẽ được sử dụng để truyền gói dữ liệu tới đích. Dữ liệu này cũng nằm trong bảng định tuyến.
    -
    Header lớp MAC: Địa chỉ MAC được đặt trên để đến đúng hop kế tiếp, địa MAC lấy từ bảng ARP (Address Resolution Protocol) cho ip hoặc bảng tham chiếu khác, như bảng frame relay map.

    Bây giờ ta đã hiểu thêm được những thành phần và tính năng cơ bản của một con router của Cisco tiếp theo chúng tao sẽ tìm hiểu cách chạy một chương trình Dynamips/Dynagen và cấu hình các tham số này
    Lâm Văn Tú
    Email :
    cntt08520610@gmail.com
    Viet Professionals Co. Ltd. (VnPro)
    149/1D Ung Văn Khiêm P25 Q.Bình thạnh TPHCM
    Tel: (08) 35124257 (5 lines)
    Fax (08) 35124314
    Tập tành bước đi....


    Comment

    Working...
    X