Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 179 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
179
Dung lượng
1,33 MB
Nội dung
T-KERNEL - TỔNG QUAN Chương TỔNG QUAN VỀ T-KERNEL 102 Vu Tuan Thanh 1.1 Vị trí T-Kernel Digitally signed by Vu Tuan Thanh DN: cn=Vu Tuan Thanh, c=VN, email=thanhvt@cse hcmut.edu.vn Reason: I am the author of this document Date: 2007.06.14 15:10:01 +07'00' Vị trí T-Kernel hệ thống T-Engine mơ tả hình 1.1 phía Hình 1.1: Vị trí T-Kernel T-Kernel cách tổng qt gồm có T-Kernel Operating System(T-Kernel/OS) , T-Kernel System Manager(T-Kernel/SM) T-Kernel Debugger Suppor (T-Kernel/DS) Nhưng số trường hợp(theo nghĩa hẹp) T-Kernel hiểu T-Kernel/OS T-Kernel Operating System (T-Kernel/OS) cung cấp số hàm chức sau: • • • • • • Hàm điều khiển task Hàm giao tiếp task Hàm quản lý nhớ Hàm quản lý Exception/interrupt Hàm quản lý thời gian Hàm quản lý Subsystem T-Kernel System Manager ( T-Kernel/SM) cung cấp số hàm chức sau: • • • • • • • Hàm quản lý nhớ hệ thống Hàm quản lý không gian địa Hàm quản lý thiết bị Hàm quản lý Interrupt Hàm hỗ trợ truy xuất I/O Hàm quản lý nguồn Hàm quản lý thông tin cấu hình hệ thống GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL - TỔNG QUAN 103 T-Kernel Debugger Support (T-Kernel/DS) cung cấp hàm chức sử dụng cho q trình debugging: • Hàm tham khảo trạng thái bên Kernel • Trace 1.2 Scalability T-Kernel real-time kernel sử dụng hệ thống nhúng , có phạm vi ứng dụng rộng rãi từ hệ thống lớn đến hệ thống nhỏ Mục tiêu nhắm tới T-Kernel nâng cao khả “khả chuyển” phần mềm device driver middleware T-Kernel thiết kế để áp dụng hệ thống có qui mơ lớn Cách tiếp cận với hệ thống trước khơng cịn áp dụng việc định hàm cụ thể cho hệ thống gây nhiều khó khăn cho tính “khả chuyển” device driver , middleware phần mềm khác.T-Kernel khơng theo cách tiếp cận mặt nguyên lý hệ điều hành tương thích với T-Kernel phải thực tất đặc tả kĩ thuật T-Kernel Tuy nhiên, hệ thống mà khơng cần tất hàm hệ điều hành hàm khơng cấn phải thực Điều quan trọng người sử dụng định hàm không cần thực nhà cung cấp - Đối với nhà cung cấp T-Kernel : • Tất đặc tả kĩ thuật phải thực việc thực “Scaledown” cho hệ thống đích cụ thể phép “Scale-down” có nghĩa khơng cung cấp tổng thể hàm đặc tả T-Kernel khơng có cách cư xử bất thường (return error , …) hàm khơng thực mà gọi • Cung cấp cho người sử dụng phương tiện cho phép người sử dụng bỏ qua thực hàm không cần thiết - Đối với nhà cung cấp Middleware: • Middleware phải thiết kế để thỏa mãn tất yêu cầu T-Kernel Nó bị giới hạn đặc tả hệ thống đích phải có khả thích hợp với hệ thống khác biệt • Cung cấp cho người sử dụng phương tiện cho phép người sử dụng bỏ qua thực hàm không cần thiết GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL - NHỮNG KHÁI NIỆM CƠ BẢN 104 Chương NHỮNG KHÁI NIỆM CƠ BẢN CỦA T-KERNEL 2.1 Ý nghĩa số thuật ngữ 2.1.1 Task, invoking task Đơn vị luận lí chương trình thực thi gọi “task” Những chương trình mà gán cho task thực thi cách cịn chương trình mà gán cho nhiều task thực thi cách song song Khái niệm xử lý đồng thời tồn góc nhìn người dùng , thực task thực theo chế time-sharing điều khiển kernel Một task mà triệu gọi hàm “system call” gọi “invoking task” 2.1.2 Dispatch, dispatcher Chuyển đổi thực thi task thực thi processor gọi “dispatching” Cơ chế kernel mà thực q trình dispatching gọi “dispatcher” 2.1.3 Scheduling , scheduler Quá trình xử lý để xác định task thực thi gọi “scheduling” (định thời) Cơ chế kernel để xác định trình scheduling gọi “scheduler” Nhìn chung , “scheduler” thực bên trình xử lý hàm “system call” hay “dispatcher” 2.1.4 Context Môi trường mà chương trình thực thi gọi chung “context” (hay ngữ cảnh) Trong ngữ cảnh phải đồng , chế độ hoạt động processor vùng stack phải giống Chú ý , ngữ cảnh khái niệm quan trọng từ cách nhìn ứng dụng , trình xử lý thực thi độc lập với ngữ cảnh Trong thực tế thực loại ngữ cảnh đơi lúc lại xử dụng chế độ hoạt động processor stack 2.1.5 Precedence Mối liên hệ yêu cầu xử lý khác mà xác định thứ tự thực thi gọi “precedence” (độ ưu tiên ) Khi process có độ ưu tiên cao chuyển sang trạng thái ready task có độ ưu tiên thấp thực thi qui luật chung task có độ ưu tiên cao chuyển sang trạng thái thực thi task thực thi phải chuyển sang trạng thái ready Độ ưu tiên thông số gán cho task ứng dụng để điều khiển thứ tự thực thi task hay để xử lý q trình gởi thơng điệp Nói cách khác độ ưu tiên khái niệm dùng để làm rõ thứ tự mà task thực thi GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL - NHỮNG KHÁI NIỆM CƠ BẢN 105 2.2 Trạng thái task qui luật định thời 2.2.1 Trạng thái task Trạng thái task phân làm loại liệt kê bên Trong trạng thái WAIT phân làm loại nhỏ RUN state Một task trạng thái RUN state có nghĩa task thời thực thi Khi mà task độc lập với ngữ cảnh (Task-independent portion) thực thi task mà thực thi trước bắt đầu thực thi Task-independent portion nói trạng thái Run state (b) READY state Task mà hồn tất q trình chuẩn bị cho thực thi chưa chuyển sang trạng thái RUN task có độ ưu tiên cao thực thi Trong trường hợp , task thực thi trở thành task có độ ưu tiên cao task trạng thái READY (c) WAIT states Task thực thi điều kiện cho thực thi chưa có sẵn Nói cách khác task chờ đợi điều kiện cho thực thi thỏa mãn Trong task trạng thái WAIT giá trị ghi program counter số thông tin khác chương trình đươc thực thi lưu lại Khi task đánh thức để tiếp tục thực thi từ trạng thái thơng tin lưu lại phục hồi trước task vào trạng thái WAIT Trạng thái chia làm trạng thái nhỏ (c.1) WAIT state Sự thực thi bị ngừng lại task thực thi vừa triệu gọi hàm system call Và thực thi tiếp tục hàm system call hoàn thành (c.2) SUSPEND state Sự thực thi buộc phải ngưng lại task khác (c.3) WAIT-SUSPEND state Task lúc vừa trạng thái WAIT vừa trạng thái Suspend WAITSUSPEND kết task yêu cầu Suspend task trạng thái WAIT T-Kernel phân biệt rõ ràng trạng thái WAIT SUSPEND Một task khơng thể tự vào trạng thái SUSPEND (a) (d) DORMANT state Task mà chưa bắt đầu thực thi hay hoàn thành thực thi Trong task trạng thái DORMANT tất thơng tin thể thực thi khơng lưu lại Khi task bắt đầu thực thi từ trạng thái DORMANT thực thi bắt đầu địa bắt đầu task Ngoại trừ đặc tả khác giá trị ghi không lưu lại (e) NON-EXISTENT state Đây trạng thái ảo trước task tạo , sau bị deleted chưa đăng kí với hệ thống Phụ thuộc vào thực mà có thêm số trạng thái tạm thời khác mà không thuộc vào trạng thái trạng thái liệt kê GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL - NHỮNG KHÁI NIỆM CƠ BẢN 106 Khi task chuyển sang trạng thái READY mà có độ ưu tiên cao task thực thi trình “dispatching” xảy task chuyển sang trạng thái READY sau chuyển sang trạng thái RUN Trong trường hợp task mà thực thi thời điểm “dispatching” xảy nói bị tước đoạt quyền thực thi task Một task nói bắt đầu thực thi có nghĩa chuyển từ trạng thái DORMANT sang trạng thái READY Do mà nói task thực thi có nghĩa task trạng thái ngồi trạng thái DORMANT hay NON-EXISTENT Và task nói khỏi thực thi có nghĩa task đến trạng thái DORMANT Một task nói giải phóng khỏi trạng thái “wait” có nghĩa task trạng thái WAIT chuyển sang trạng thái READY , cịn task trạng thái WAITSUSPEND chuyển sang trạng thái SUSPEND Sự tiếp tục thực thi task trạng thái “suspend” có nghĩa task trạng thái SUSPEND chuyển sang trạng thái READY, task trạng thái WAIT-SUSPEND chuyển sang trạng thái WAIT Sự chuyển trạng thái cac task mô tả hình 2.1 Hình 2.1 : Sơ đồ chuyển trạng thái GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL - NHỮNG KHÁI NIỆM CƠ BẢN 107 Phụ thuộc vào thực mà có thêm số trạng thái khác trạng thái Một đặc điểm T-Kernel có phân biệt rõ ràng tác động hàm system call lên task triệu gọi task khác (bảng 2.1 ) Lí cho phân biệt làm cho sơ đồ chuyển trạng thái task trở nên rõ ràng tạo thuận lợi cho việc hiểu rõ hàm system call Sự phân biệt tác động hàm system call lên task triệu gọi task khác xem phân biệt chuyển trạng thái từ trạng thái RUN chuyển trạng thái từ trạng thái khác Bảng 2.1 : Phân biệt chuyển trạng thái “invoking task” task khác Trạng thái WAIT SUSPEND có mối quan hệ trực giao , u cầu cho chuyển tới trạng thái SUSPEND không gây ảnh hưởng tới điều kiện cho giải phóng task khỏi trạng thái WAIT Điều có nghĩa điều kiện để giải phóng task khỏi trạng thái WAIT giống task trạng thái WAIT hay WAIT-SUSPEND Do đó, yêu cầu chuyển sang trạng thái SUSPEND đưa task mà trạng thái chờ đợi tài nguyên (semaphore , memory block ,….) chuyển sang trạng thái WAIT-SUSPEND điều kiện để cấp phát tài ngun cho khơng có thay đổi so với bị u cầu chuyển sang trạng thái SUSPEND Lí để T-Kernel làm phân biệt rõ ràng trạng thái WAIT (gây triệu gọi hàm system call) trạng thái SUSPEND ( gây task khác) trạng thái đơi lại có trùng lắp lên Bằng phân biệt rõ ràng trạng thái mà chúng trùng lắp lên WAIT-SUSPEND, sơ đồ chuyển trạng thái rõ ràng hàm system call trở nên dễ hiểu 2.2.2 Các qui luật định thời T-Kernel định thời dựa độ ưu tiên task theo chế “preemptive” Nếu có nhiều task mà chúng thực thi task có độ ưu tiên cao chuyển sang trạng GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL - NHỮNG KHÁI NIỆM CƠ BẢN 108 thái RUN , task lại phải chuyển sang trạng thái READY Những task có độ ưu tiên định thời theo qui tắc FCFS (First Come First Served) Theo chế định thời T-Kernel task có độ ưu tiên cao thực thi , task lại đơn giản khơng thực thi Và task có độ ưu tiên cao khơng vào trạng thái WAIT , hay lí mà khơng thực thi task khác khơng thực thi.Đây khác so với cách định thời hệ thống chia thời gian (Time Sharing System - TSS) , hệ thống TSS task đối xử cách bình đẳng với Tuy nhiên dùng hàm system call để thay đổi thứ tự thực thi task có độ ưu tiên Do ứng dụng dùng hàm system call để định thời theo chế round-robin , kiểu định thời TSS Hình 2.2 : Thứ tự thực thi trạng thái khởi tạo Hình 2.2 hình bên minh họa rõ cho thấy cách mà task thưc thi mà chúng có độ ưu tỉên giống task có độ ưu tiên khác biệt Ở hình 2.2 thứ tự thực thi task sau task A có độ ưu tiên 1, task E có độ ưu tiên task B, C , D có độ ưu tiên bắt đầu Task với độ ưu tiên cao A chuyển sang trạng thái RUN Sau task A kết thúc task B với độ ưu tiên cao chuyển sang trạng thái RUN (hình 2.3) Hình 2.3 : Thứ tự thực thi sau task B chuyển sang trạng thái RUN Khi task A lại bắt đầu thực thi lần task B bị tước quyền thực thi chuyển sang trạng thái READY Nhưng task B task chuyển sang trạng thái RUN sớm task C, D nên cịn có quyền thực thi cao task có độ ưu tiên thứ tự thực thi task giống hình 2.2 Bây xem điều xảy task B chuyển sang trạng thái WAIT mà task trạng thái đụơc miêu tả hình 2.3 Vì thứ tự thực thi task định nghĩa cho task mà thực thi nên thứ tự thực thi task giống mơ tả hình 2.4 GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL - NHỮNG KHÁI NIỆM CƠ BẢN 109 Hình 2.4 : Thứ tự thực thi sau task B chuyển sang trạng thái WAIT Do sau mà task B giải phóng khỏi trạng thái WAIT chuyển sang trạng thái RUN sau task C D Ở task B nhận quyền thực thi thấp task có độ ưu tiên (hình 2.5) Hình 2.5 : Thứ tự thực thi task B giải phóng khỏi trạng thái WAIT Tóm lại mà task chuyển từ trạng thái READY sang RUN quay trạng thái READY có quyền thực thi cao task có độ ưu tiên sau task chuyển từ RUN sang WAIT , mà trạng thái WAIT giải phóng có quyền thực thi thấp task có độ ưu tiên Chú ý task chuyển từ trạng thái SUSPEND sang trạng thái READY phải có quyền thực thi thấp task có độ ưu tiên Trong hệ thống có sử dụng nhớ ảo mà task phải chờ đợi thay trang bị chuyển sang trạng thái SUSPEND hệ thống thay đổi thứ tự thực thi task kết trình chờ đợi thay trang 2.3 Xử lý interrupt Interrupt T-Engine bao gồm interrupt bên thiết bị gây hay interrupt bên CPU gây Một trình xử lý interrupt định nghĩa cho số interrupt Mỗi chương trình quản lý interrupt gán cho địa thực thi trực tiếp mà không cần có can thiệp hệ điều hành gán cho địa thực thi chương trình viết ngơn ngữ cấp cao GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL - NHỮNG KHÁI NIỆM CƠ BẢN 110 2.4 Xử lý ngoại lệ task T-Kernel cho phép định nghĩa hàm xử lý ngoại lệ task Cần ý ngoại lệ mà không CPU xem interrupt Khi task thực thi mà có ngoại lệ xảy kích khởi thực thi trình xử lý ngoại lệ task task thực thi buộc phải ngưng lại Khi mà trình xử lý ngoại lệ thực thi xong task tiếp tục thực thi Một trình xử lý ngoại lệ task cho task đăng kí cho ứng dụng 2.5 Các trạng thái hệ thống 2.5.1 Các trạng thái hệ thống Nontask-portion thực thi Khi mà task lập trình để chạy T-Engine trạng thái task theo dõi cách quan sát lược đồ chuyển trạng thái task Tuy nhiên , trường hợp chương trình xử lý interrupt hay hàm quản lý dịch vụ mở rộng ( extended SVC handler) người sử dụng phải thực trình lập trình mức độ gần với kernel với task Và trường hợp điều mà cần quan tâm trạng thái hệ thống Nontask-portion thực thi, lí mà mà trạng thái hệ thống làm rõ Hình 2.6 : Phân loại trạng thái hệ thống Các trạng thái hệ thống phân loại hình 2.6 Trong trạng thái “transient state” trạng thái mà hệ điều hành thực thi ( ví dụ hàm system call) Điều quan trọng từ quan điểm người dùng mà hàm system call triệu gọi q trình thực thi chúng khơng chia nhỏ trạng thái bên không thấy bời người sử dụng Bời lí mà OS thực thi xem “trasient state” bên xem hộp đen Tuy nhiên , trường hợp dưói thực thi “transient state” bị chia nhỏ: -Khi nhớ cấp phát hay giải phóng trường hợp hàm system call thực trình “get” hay “release” nhớ ( hàm quản lý nhớ TKernel/SM gọi) -Trong hệ thống sử dụng nhớ ảo, mà nhớ không thường trú bị truy xuất trình thực thi hàm system call Khi mà task trạng thái “transient state”giống hoạt động hàm system call tk_ter_tsk dùng để kết thúc thực thi task khơng bảo đảm Ngồi ,hàm GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL - NHỮNG KHÁI NIỆM CƠ BẢN 111 dùng để suspend task tk_sus_tsk gây deadlock hay vấn đề khác ngừng thực thi task mà khơng xóa khỏi trạng thái trasient state Do , mà qui luật hàm tk_sus_tsk tk_ter_tsk không sử dụng chương trình Những hàm system call sử dụng hệ thống hệ thống có nhớ ảo hay chương trình debug mà thực thi gần với hệ điều hành đơi lúc xem phần hệ điều hành Task-independent portion quasi-task portion trạng thái hệ thống trình xử lý interrupt hay ngoại lệ task thực thi Phần trình xử lý mà thực thi ngữ cảnh task gọi quasi-task portion , cịn phần mà thực thi độc lập với ngữ cảnh task gọi Task-independent portion Một trình xử lý hàm system call mở rộng hệ thống người dùng định nghĩa quasi-task portion, ngược lại trình xử lý interrupt hay hàm xử lý kiện thời gian kích khởi interrupt bên Task-independent portion Trong quasi-task portion, task có chuyển trạng thái giống task bình thường hàm system call gọi trạng thái WAIT Trasient state , Task-independent portion quasi-task portion gọi chung nontask-portion Trong chương trình thực thi task ngồi trạng thái liệt kê gọi task-portion 2.5.2 Task-independent portion quasi-task portion Một đặc điểm Task-independent portion (interrupt handler, time event handler,…) việc xác định task thực thi trước vào vùng task-independent điều vơ nghĩa khái niệm “invoking task” không tồn Do mà hàm system call vào trạng thái WAIT state hay hàm system call thiết kế cho “invoking task” không gọi từ Task-independent portion Ngồi ra, khơng thể định task thực thi trước vào Task-independent portion mà khơng có q trình “dispatching” Nếu trình “dispatching” cần thiết phải thực bị trì hỗn lại task-independent thực thi xong Quá trình gọi “delay dispatching” Nếu trình “dispatching” xảy lúc trình xử lý interrupt thực thi ( Taskindependent portion) phần cịn lại trình xử lý phải bị hỗn lại task bắt đầu trình “dispatching” ,điều gây lồng interrupt minh họa hình 2.7.Trong ví dụ bên interrupt X xảy mà task A thực thi trình xử lý interrupt thực thi có interrupt Y có độ ưu tiên cao đến Trong trường hợp interrupt Y kích khởi hoạt động task B task B bắt đầu thực thi mà trình xử lý interrupt Y kết thúc phần cịn lại trình xử lý interrupt X từ (2) đến (3) tiếp tục thực thi task A chuyển sang trạng thái RUN Điều nguy hiểm trình xử lý interrupt A bị tước quyền thực thi khơng trình xử lý interrupt Y mà task B Điều làm cho trình xử lý interrupt khơng cịn độ ưu tiên cao so với task thông thường lí phải giới thiệu q trình trì hỗn dispatching GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM 266 Chương T-KERNEL / SM Chương mô tả hàm T-kernel System Manager cung cấp (T-kernel/SM) Tất ý phần bổ sung : • Theo nguyên tắc, hàm có tên tk_ - hàm SVC mở rộng, hàm lại hàm thư viện (bao gồm hàm inline) hay macro ngơn ngữ C • Một vài thư viện macro gọi hàm SVC mở rộng hay hàm system call cách gián tiếp • Những mã lỗi E_PAR, E_MACV, E_NOMEM không mô tả ln có khả xuất hiện, ngoại trừ vài lí đặt biệt • Ngoại trừ nơi có ý, hàm SVC mở rộng hàm thư viện TKernel/SM gọi từ Task-independent portion dispatching interupt bị vơ hiệu Tuy nhiên, có vài giới hạn phụ thuộc vào thực (E_CTX) • Hàm SVC mở rộng hàm thư viện T-Kernel/SM gọi từ mức bảo vệ thấp mà hàm system call T-Kernel/OS gọi (thấp TSVCLimit)(E_OACV) • Hàm SVC mở rộng hàm thư viện T-Kernel/SM lõm vào (reentrant) ngoại trừ giải thích đặc biệt đưa • Sự phát mã lỗi E_PAR, EMACV, E_CTX phụ thuộc vào thực; lỗi lúc phát lỗi Vì nguyên nhân này, service call phải không trường hợp lỗi xuất GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM 5.1 267 Quản lý Bộ nhớ Hệ thống Những hàm quản lý nhớ hệ thống quản lý tất vùng nhớ cấp phát T-Kernel (bộnhớ hệ thống) Điề bao gồm vùng nhớ T-Kernel sử dụng các stack task, đệm thông điệp (message buffer), memory pool Bộ nhớ hệ thống quản lý đơn vị block nhớ Bình thường kích thước block kích thước trang định nghĩa cho MMU Một hệ thống không sử dụng MMU thiết lập kích thước block tuỳ theo ý muốn, nên khoảng KB đến KB Kích thước block biết cách gọi hàm tk_ref_smb Bộ nhớ hệ thống định vị không gian hệ thống T-Kernel không quản lý không gian nhớ task Những hàm quản lý nhớ hệ thống gọi SVC mở rộng Chúng dùng T-Kernel mà ứng dụng , subsystem device driver.Trong trường hợp sử dụng T-kenel, việc gọi hàm mà không di qua SVC mở rộng tuỳ chọn phụ thuộc vào thực 5.1.1 Sự cấp phát nhớ hệ thống • ER tk_get_smb ( VP *addr, INT nblk, UINT attr ) Cấp phát không gian nhớ gốm số lượng block liên tiếp cho biết nblk, có thuộc tính attr Địa khố nhớ trả addr attr := (TA_RNG0 || TA_RNG1 || TA_RNG2 || TA_RNG3) | [TA_NORESIDENT] #define TA_NORESIDENT #define TA_RNG0 #define TA_RNG1 #define TA_RNG2 #define TA_RNG3 0x00000010 /* nonresident */ 0x00000000 /* protection level */ 0x00000100 /* protection level */ 0x00000200 /* protection level */ 0x00000300 /* protection level */ Vùng nhớ đạt không thuộc nhóm resource Nếu vùng nhớ khơng cấp phát mã lỗi E_NOMEM trả • ER tk_rel_smb ( VP addr ) Giải phóng vùng nhớ có địa bắt đầu addr, addr phải lấy từ hàm itk_get_smb • ER tk_ref_smb ( T_RSMB *pk_rsmb ) Lấy tthông tin nhớ hệ thống typedef struct t_rsmb { INT blksz; /* block size (in bytes) */ INT total; /* total block count */ INT free; /* remaining free block count */ /* Implementation-dependent information may be added beyond this point.*/ } T_RSMB; GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM 268 Khi nhớ ảo sử dụng, tổng số block số block trống định rõ ràng Trong trường hợ đó, tổng số số block trống tuỳ thuộc vào thực, tốt chúng nên có giá trị cho tỉ số free/total đưa đánh giá có ích cho khả nhớ lại 5.1.2 Những hàm thư viện cấp phát nhớ Bởi nhớ hệ thống cấp phát với đơn vị block, nên hàm thư viện cung cấp để chia block để sử dụng • • • • • • • • void* void* void* void void* void* void* void Vmalloc( size_t size ) Vcalloc( size_t nmemb, size_t size ) Vrealloc( void *ptr, size_t size ) Vfree( void *ptr ) Kmalloc( size_t size ) Kcalloc( size_t nmemb, size_t size ) Krealloc( void *ptr, size_t size ) Kfree( void *ptr ) Những hàm giống hàm thư viện chuẩn C mallo, calloc, realloc, free v.v… V - dùng cho nhớ không thường trú (nonresident memory) K - dùng cho nhớ thường trú (resident memory), hai trường hợp nhớ cấp phát có mức bảo vệ TSVCLimit Những hàm gọi từ Task-independent portion dispatching interupt bị vô hiệu Cách cư xử không xác định chúng gọi trường hợp (Hệ thống bị lỗi.) 5.2 Quản lý Khơng gian Địa Đặc quyền truy cập nhớ tổ chức tthông tin đặc quyền truy cập cho task Bản chất tthông tin đặc quyền truy cập cho biết quyền truy cập mức bảo vẹ trước SVC mở rộng gọi Ví dụ, task thực thi mức bảo vệ gọi SVC mở rộng, tthơng tin quyền truy cập cho biết có quyền truy cập mức tthơng tin quyền truy cập nhớ thiết lập sau • Ngay sau task bắt đầu, quyền truy cập định khởi tạo • Khi SVC mở rộng gọi, quyền truy cập mức bảo vệ mà thực thi thời điểm việc gọi thiết lập • Khi trở từ SVC mở rộng, quyền truy cập trở lại lúc trước gọi SVC mở rộng • Việc thự thi hàm SetTaskSpace ( ) copy quyền truy cập thời task đích đến task gọi hàm 5.2.1 Cấu hình khơng gian địa • ER SetTaskSpace( ID tskid ) GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM 269 Gán cho task gọi hàm không gian task tthông tin quyền truy cập task định tskid Và kết hai task có chung khơng gian task tthơng tin quyền truy cập Chú ý copy áp dụng gọi hàm, sau task có ID tskid thay dổi task gọi hàm không bị ảnh hưởng Nếu task gọi hàm gọi SVC mở rộng , trở không gian task không trở lại ban đầu Nếu tskid = TSK_SELF khơng có điều thay đổi E_ID tskid không hợp lệ E_NOEXS Task định tskid không tồn E_OBJ Chỉ định task gọi hàm task đích mà khơng dùng TSK_SELF 5.2.2 Kiểm tra không gian địa Những hàm sau kiểm tra việc truy cập vùng nhớ định hay không, dựa tthông tin quyền truy cập Nếu việc truy cập khơng thể thực (khơng có đặt quyền hay vùng nhớ khơng tồn tại) mã lỗi E_MACV trả -R -RW -RE • • • ER ER ER Kiểm tra quyền đọc Kiểm tra quyền đọc ghi Kiểm tra quyền đọc thực thi ChkSpaceR ( VP addr, INT len ) ChkSpaceRW ( VP addr, INT len ) ChkSpaceRE ( VP addr, INT len ) Kiểm tra quyền truy cập đến khơng gian nhớ cá kích thước len byte từ địa addr • • INT INT ChkSpaceBstrR ( UB *str, INT max ) ChkSpaceBstrRW ( UB *str, INT max ) Kiểm tra quyền truy cập vùng nhớ str kí tự kết thúc chuỗi (‘\0’) hay đạt đến chiều dai định max Nếu max = 0, tham số max bị bỏ qua, kiểm tra đến kí tự kết thúc chuỗi Nếu quyền truy cập, chiều dài chuỗi trả (tính byte) kí tự kết thúc hay max • • INT ChkSpaceTstrR( TC *str, INT max ) INT ChkSpaceTstrRW( TC *str, INT max ) typedef UH TC; /* TRON character code */ #define TNULL ( ( TC ) ) /* TRON code string termination */ Kiểm tra quyền truy cập vùng nhớ str kí tự kết thúc chuỗi Mã TRON (TNULL) hay đạt đến chiều dài định max (số TC) Nếu max = 0, tham số max bị bỏ qua, kiểm tra đến kí tự kết thúc chuỗi Nếu quyền truy cập, chiều dài chuỗi trả (tính byte) kí tự kết thúc hay max GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM 270 str phải địa chẵn 5.2.3 Khố khơng gian địa Bộ nhớ nói chung thưịng trú hay khơng thường trú trang thời điểm quản lý theo đơn vị trang Vì lý này, nhiều trường hợp OS không kiểm tra cho việc so trùng không gian bị khố khơng khố Đó trách nhiệm bên gọi hàm để không gian tương tự định hoạt động khố hay khơng khố • ER LockSpace ( VP addr, INT len ) Khoá (làm thường trú) khơng gian nhớ có chiều dài len byte addr E_MACV Vùng nhớ không tồn • ER UnlockSpace ( VP addr, INT len ) Mở khố (làm khơng thường trú) khơng gian nhớ có chiều dài len byte addr Nếu có khơng gian tương tự bị khố, khơng giải khố số lượng hành vi mở khoá với số hành vi khoá Chú ý khơng thể mở khố phần khơng gian bị khố 5.2.4 Lấy địa vật lý • INT CnvPhysicalAddr ( VP vaddr, INT len, VP *paddr ) vaddr len paddr return code Địa luận lý Kích thước không gian vùng nhớ (bytes) Địa vật lý trả Kích thước trả (bytes) khơng gian địa vật lý liên tục lỗi Không gian mà địa vật lý lấy từ dó phải khố ( thường trú) E_MACV Vùng nhớ khơng tồn 5.2.5 Ánh xạ vùng nhớ ( Map memory) • ER MapMemory ( VP paddr, INT len, UINT attr, VP *laddr ) Ánh xạ vùng len byte paddr địa vật lý sang vùng luận lý trả địa luận lý *laddr Nếu paddr = NULL, vài vùng nhớ liên tục có địa vật lý tự động cấp phát ánh xạ thành vùng luận lý Vùng dịa luận lý ánh xạ có thuộc tính với attr attr := (MM_USER || MM_SYTEM ) | [MM_READ] | [MM_WRITE] |[MM_EXECUTE] | [MM_CDIS] MM_USER Mức truy cập người dùng GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM 271 MM_SYSTEM Mức truy cập hệ thống MM_READ Quyền đọc MM_WRITE Quyền ghi MM_EXECUTE Quyền thực thi MM_CDIS Làm vô hiệu cache E_LIMIT Thiếu vùng nhớ luận lý cho việc ánh xạ E_NOMEM Thiếu nhớ • 5.3 ER UnmapMemory ( VP laddr ) Gở bỏ ánh xạ cho vùng nhớ luận lý ánh xạ MapMemory ( ) Địa luận lý cấp phát MapMemory phải thiết lập cho laddr Nếu vài vùng nhớ cấp phát MapMemory, vùng gở bỏ ánh xạ Quản lý Thiết bị (device) 5.3.1 Những khái niệm Hình 5.1 Những hàm quản lý thiết bị (1) Device Name (UB* type) Mỗi device name chuỗi kí tự có chiều dài lên tới kí tự chứa phần tử sau #define L_DEVNM /*chiều dài tên thết bị*/ Type Tên cho biết loại thiết bị Những kí tự từ ‘a’ đến ‘z’ ‘A’ đến ‘Z’ sử dụng Unit Một chữ thiết bị vật lý Mỗi unit gán kí thự từ ‘a’ đến ‘z’ theo thứ tự từ ‘a’ Subunit Gồm đến kí số cho biết thiết bị luận lý Mỗi subunit gán số từ tới 254 theo thứ tự Device name có định dạng gồm type + unit + subunit Một vài thiết bị khơng có unit hay subunit Một tên chứa type + unit gọi tên thiết bị vật lý Một tên chứa type + unit + subunit gọi tên thiết bị luận lý để phân biệt với tên thiết bị vật lý Nếu khơng có GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM 272 subunit tên thiết bị vật lý tên thiết bị luận lý giống Thuật ngữ “device name” có nghĩa tện thiết bị luận lý Một subunit nói chung tham khảo đến phân vùng đĩa cứng, sử dụng tên thiết bị luận lý khác Ví dụ had hda0 fda rsa kpbd Đĩa cứng Đĩa cứng (phân vùng 1) Đĩa mềm Cổng nối tiếp Keyboard/poiting device (2) Device ID ( ID type ) Bằng cách đăng kí thiết bị (device driver) với T-Kernel/SM, device ID (>0) gán cho thiết bị (tên thiết bị vật lý) ID thiết bị luận lý chứa ID thiết bị vật lý thêm vào số subunit (1 đến 255) devid : ID thiết bị phần đăng kí devid Thiết bị vật lý devid + n + Subunit thứ n (thiết bị luận lý) Ví dụ had devid hda0 devid + hda1 devid + Entire hard disk 1st partition of hard disk 2nd partition of hard disk (3) Device Attribute ( ATR type ) Nhữgn thuộc tính thiết bị định nghĩa sau để phân loại thiết bị thuộc tính chúng IIII IIII IIII IIII PRxx xxxx KKKK KKKK 16 bit cao thuộc tính phụ thuộc thiết bị định nghĩa cho thiết bị 16 bit thấp thuộc tính chuẩn định nghĩa sau #define TD_PROTECT #define TD_REMOVABLE 0x8000 0x4000 /* P: write protection */ /* R: removable media */ #define TD_DEVKIND #define TD_DEVTYPE 0x00ff 0x00f0 /* K: device/media kind */ /* device type */ 0x0000 0x0010 /* device type */ /* undefined/unknown */ /* disk device */ 0x0010 /* disk kind */ /* miscellaneous disk */ #define TDK_UNDEF #define TDK_DISK #define TDK_DISK_UNDEF GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM #define TDK_DISK_RAM */ #define TDK_DISK_ROM */ #define TDK_DISK_FLA disk */ #define TDK_DISK_FD #define TDK_DISK_HD #define TDK_DISK_CDROM 273 0x0011 /* RAM disk (used as main memory) 0x0012 /* ROM disk (used as main memory) 0x0013 /* Flash ROM or other silicon 0x0014 0x0015 0x0016 /* floppy disk */ /* hard disk */ /* CD-ROM */ Hiện khơng có thiết bị đĩa định nghĩa Những thiết bị khác gán loại không xác định (TDK_UNDEF) (4) Device Descriptor ( ID type ) Một device descriptor (>0) định danh sử dụng cho truy cập thiết bị, gán T-Kernel/SM thiết bị mở để sử dụng Một device descriptor phụ thuộc vào nhóm resou hành vi sử dụng device description thể task thuộc nhóm resource device desriptor Mã lỗi E_OACV trả điều bị vi phạm (5) Request ID ( ID type ) Khi có yêu cầu IO đến thiết bị, ID yêu cầu (>0) gán để định danh yêu cầu ID sử dụng để đợi IO hoàn thành (6) Data Number ( INT type) Data thiết bị định data Data phân loại thành data chi tiết thiết bị (device-specific data) data thuộc tính (attribute data) Device-specific data : Data number ≥ Attribute data : Datanumber ) { er = tk_wai_dev(dd, er, asize, &ioer, TMO_FEVR); if ( er > ) er = ioerr; } return er; } • ID tk_wri_dev ( ID dd, INT start, VP buf, INT size, TMO tmout ) dd start buf size tmout return code Device descriptor Vùng bắt đầu ghi ( ≥ 0: Device-specific data, < 0: Attribute data) Vùng đệm để chứa liệu cần ghi Kích thước cần ghi Thời gian timeout chấp nhận yêu cầu (ms) Request ID lỗi Bắt đầu ghi data chi tiết thiết bị data thuộc tính từ thiết bị định.Hàm ghi trả mà không cần phải đợi cho việc ghi hồn thành Khơng gian định buf không việc ghi hồn thành Việc đợi cho q trình ghi hoàn thành thực cách gọi hàm tk_wai_dev Thời gian cho trình ghi khác cho thiết bị Trong trường hợpghi data chi tiết thiết bị, loại thiết bị định start size cho riêng data Với data thuộc tính, start số data thuộc tính size tính byte Data thuộc tính định ghi Thơng thường kích thước ghi phải với kích thước data thuộc tính Việc ghi nhiều thuộc tính khơng thể thực trình ghi Khi size = 0, việc ghi thực khơng thực kích thước data kiểm tra Việc có hay khơng u cầu chấp nhận trình đọc hay ghi chưa kết thúc phụ thuộc vào device driver Nếu yêu cầu khơng chấp nhận xếp hàng đợi, thời gian timeout cho việc đợi yêu cầu chấp nhận thiết lập tmout (có thể TMO_POL hay TMO_FEVR) GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM 277 E_ID dd không hợp lệ chưa mở E_OACV Chế độ mở không hợp lệ ( không cho phép ghi ) E_LIMIT Số lượng yêu cầu vượt giới hạn E_ABORT Quá trình bị bỏ qua Những lỗi khác có device driver trả • ID tk_swri_dev ( ID dd, INT start, VP buf, INT size, INT *asize) Ghi đồng Hàm tương đương đoạn code sau ER tk_swri_dev( ID dd, INT start, VP buf, INT size, INT *asize ) { ER er, ioer; er = tk_wri_dev(dd, start, buf, size, TMO_FEVR); if ( er > ) { er = tk_wai_dev(dd, er, asize, &ioer, TMO_FEVR); if ( er > ) er = ioerr; } return er; } • ID tk_wai_dev ( ID dd, ID reqid, INT *asize, ER *ioer, TMO tmout ) dd reqid asize ioer tmout return code Device descriptor Request ID Kích thước đọc hay ghi Lỗi IO trả Timeout (ms) Request ID hoàn thành lỗi Hàm thực việc chờ cho yêu cầu reqid thiết bị dd thực xong Hàm có tác dụng cho yêu sầu xử lý hàm gọi, yêu cầu nảy sinh sau gọi hàm khơng đợi Khi có nhiều yêu cầu xử lý dồng thời, thứ tự hồn thành u cầu khơng thiết phải với thứ tự chúng nảy sinh điều phụ thuộc vào thiết bị Tuy nhiên, trình xử lý đảm bảo thực liện tục mà kết phù hợp với thứ tự yêu cầu Ví dụ thực việc đọc từ đĩa, thứ tự thay đổi sau Thứ tự block yêu cầu Thứ tự trình xử lý Thứ tự dể hiểu việc truy cập đĩa hiệu Thời gian timeout thiết lập tmout Nếu lỗi timeout (E_TMOUT) trả về, tk_wai_dev phải gọi để hồn thành q trình xử lý u cầu tiếp tục Khi reqid > tmout = TMO_FEVR thiết lập việc đợi khơng có timeout GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM 278 Nếu kết xử lý có lỗi ( lỗi IO,v.v…) mã lỗi trả ioer kết hàm Mã trả hàm sử dụng cho lỗi mà việc đợi không xử lý hợp lệ Khi lỗi truyền mã trả ioer khơng có nghĩa Nếu lỗi trả về, tk_wai_dev phải gọi để hồn thành q trình xử lý yêu cầu tiếp tục Các yêu cầu reqid trình xử lý kết thúc có ngoại lệ xảy xử lý, điều tuỳ thuộc vào device driver Tuy nhiên, reqid = yêu cầu không bỏ qua mà đối xử timeout Trong trường hợp E_ABORT trả Nhiều task đợi hoàn thành request ID thời điểm E_ID dd không hợp lệ chưa mở reqid không hợp lệ yêu cầu cho dd E_OBJ Có task khác đợi cho reqid E_NOEXS Khơng có u cầu thực E_TMOUT Timeout (quá trình tiếp tục) E_ABORT Quá trình bị bỏ qua Những lỗi khác có device driver trả • INT tk_sus_dev ( UINT mode ) mode Chế độ treo return code Số lượng yêu cầu vơ hiệu treo lỗi Thực q trình định mode, sau gửi số yêu cầu vô hiệu treo hay lỗi mã trả mode := ( (TD_SUSPEND | [TD_FORCE]) || TD_DISSUS || TD_ENASUS || TD_CHECK) #define TD_SUSPEND #define TD_DISSUS #define TD_ENASUS #define TD_CHECK #define TD_FORCE 0x0001 /* suspend */ 0x0002 /* disable suspension */ 0x0003 /* enable suspension */ 0x0004 /* get suspend disable request count */ 0x8000 /* forcibly suspend */ TD_SUSPEND Làm treo Nếu trạng thái treo bị vơ hiệu mã lỗi E_BUSY trả TD_SUSPEND|TD_FORCE Bắt buộc treo Làm treo trạng thái bị vô hiệu TD_DISSUS Làm vô trạng thái treo TD_ENASUS Cho phép làm treo Nếu số lượng yêu cầu cho phép treo nhiều số u cầu vơ hiệu treo khơng có chuyện sảy GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM TD_CHECK 279 Lấy số yêu cầu làm vô hiệu trạng thái treo Quá trình làm treo thực theo bước sau Xử lý trước bắt đầu treo subsystem tk_evt_ssy(0, TSEVT_SUSPEND_BEGIN, 0, 0) Q trình treo thiết bị khơng đĩa Quá trình treo thiết bị đĩa Xử lý sau treo subsystem tk_evt_ssy(0, TSEVT_SUSPEND_DONE, 0, 0) SUSPEND Đi vào trạng thái treo tk_set_pow(TPW_DOSUSPEND) E_BUSY E_QOVR • ID Trạng thái ttreo bị vơ hiệu Số yêu cầu vô hiệu treo vượt giới hạn tk_get_dev ( ID devid, UB *devnm ) devid Device ID devnm Địa chứa tên thiết bị return code Device ID thiết bị vật lý hay mã lỗi Lấy tên thiết bị định devid đặt kết trả idevnm devid device ID thiết bị vật lý thiết bị luận lý devnm cần không gian gồm (L_DEVNM + 1) byte lớn E_NOEXS • • ID ID Thiết bị định devid không tồn tk_ref_dev ( UB *devnm, T_RDEV *rdev ) tk_oref_dev ( ID dd, T_RDEV *rdev ) devnm dd rdev return code Device name Device descriptor Device information Device ID or error typedef struct t_rdev { ATR devatr; /* device attributes */ INT blksz; /* block size of device-specific data (-1: unknown) */ INT nsub; /* subunit count */ INT subno; /* 0: physical device: to nsub: subunit number+1 */ /* Implementation-dependent information may be added beyond this point.*/ } T_RDEV; Lấy tthông tin thiết bị định dennm hay dd đặt kết rdev • INT tk_lst_dev ( T_LDEV *ldev, INT start, INT ndev ) GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN T-KERNEL / SM ldev start ndev return code 280 Location of registered device information (array) Starting number Number to acquire Remaining device registration count or error typedef struct t_ldev { ATR devatr; /* device attributes */ INT blksz; /* device-specific data block size (-1: unknown) */ INT nsub; /* subunits */ UB devnm[L_DEVNM]; /* physical device name */ /* Implementation-dependent information may be added beyond this point.*/ } T_LDEV; • Lấy tthơng tin thiết bị đăng ký INT tk_evt_dev ( ID devid, INT evttyp, VP evtinf ) devid evttyp evtinf return code ID thiết bị nhận kiện Loại kiện Tthông tin cho loại kiện Mã trả device driver hay lỗi Gửi kiện đến thiết bị Những kiện yêu cầu driver : #define TDV_CARDEVT /* PC Card event (see Card Manager) */ #define TDV_USBEVT /* USB event (see USB Manager) */ E_NOEXS Thiết bị định không tồn E_PAR Những kiện quản lý thiết bị nội (evttyp < 0) định GVHD : Phạm Tường Hải Sinh viên : Nguyễn Hoàng Anh - Nguyễn Phạm Anh Khoa – Vũ Tuấn Thanh – MT01KSTN ... thực thi interrupted task t? ?? chương trình quản ký interrupt RUN trả cho tskstat Khi tskstat TTS_WAI (bao gồm TTS_WAS), giá trị tskwait wid mô t? ?? sau: tskwait TTW_SLP TTW_DLY TTW_SEM TTW_FLG TTW_MBX... hệ thống Nontask-portion thực thi, lí mà mà trạng thái hệ thống làm rõ Hình 2. 6 : Phân loại trạng thái hệ thống Các trạng thái hệ thống phân loại hình 2. 6 Trong trạng thái “transient state” trạng... chung nontask-portion Trong chương trình thực thi task trạng thái li? ?t kê gọi task-portion 2. 5 .2 Task-independent portion quasi-task portion M? ?t đặc điểm Task-independent portion (interrupt handler,