KIẾN TRÚC HỆ ĐIỀU HÀNH IOS
( INTERNETWORK OPERATING SYSTEM )
3. ( INTERNETWORK OPERATING SYSTEM )
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 region và subregion 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.
Comment