You are on page 1of 10

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

Báo cáo nhóm bài tập dài môn Hệ Điều Hành


Đề tài: Caltrain Automation

Giáo viên hướng dẫn: TS. Phạm Văn Tiến


Sinh viên thực hiện:

Tên MSSV Lớp


Phạm Hải Anh 20182358 ĐTVT.02-K63

Hà Nội, 05-2021
MỤC LỤC

Lời nói đầu................................................................................................3


I. Mô tả mục tiêu, phương pháp, cách triển khai mã nguồn......................4
1.1 Mục tiêu hướng tới...........................................................................4
1.2 Phương pháp giải quyết....................................................................4
1.3 Cách triển khai mã nguồn.................................................................5
II. Công việc thực hiện..............................................................................6
2.1 Mô tả mã nguồn cho hàm station_init()............................................6
2.2 Mô tả mã nguồn cho hàm station_load_train().................................7
III. Kết quả thu được.................................................................................8
IV. Tài liệu tham khảo...............................................................................8

1
Danh mục hình vẽ

Hình 1: Kết quả hàm station_init..............................................................7


Hình 2: Kết quả hàm station_load_train....................................................8

2
Lời nói đầu

Hệ điều hành (Operating System - OS) là phần mềm hệ


thống quản lý phần cứng máy tính, tài nguyên phần mềm và cung cấp
các dịch vụ chung cho các chương trình máy tính.
Hệ điều hành đóng vai trò trung gian trong việc giao tiếp giữa
người sử dụng và phần cứng máy tính, cung cấp một môi trường cho
phép người sử dụng phát triển và thực hiện các ứng dụng của họ một
cách dễ dàng. Hệ điều hành chia sẻ thời gian lập lịch cho các tác vụ để sử
dụng hệ thống một cách hiệu quả và cũng có thể bao gồm phần mềm kế
toán để phân bổ chi phí thời gian xử lý, lưu trữ dung lượng lớn, in ấn và
các tài nguyên khác.
Hệ điều hành trước đây và sau này sẽ luôn luôn giữu vai trò qua
trọng của thời đại công nghệ. Được sự hướng dẫn của thầy Phạm Văn
Tiến, nhóm em đã tìm hiểu về hệ điều hành pintos và chọn đề tài Caltrain
Automation để làm đề tài nghiên cứu cho bài tập lớn. Chúng em xin chân
thành cảm ơn sự hướng dẫn, chỉ dạy tận tình của thầy đã giúp chúng em
hoàn thành bài tập lớn lần này.

3
I. Mô tả mục tiêu, phương pháp, cách triển khai mã nguồn

1.1 Mục tiêu hướng tới


Tự động hóa đang dần trở thành xu hướng của thời đại. Ngành công
nghiệp đường sắt cũng không nằm ngoài xu hướng này. Việc tự động
hóa tàu đã có nhiều thành tựu với nhiều cấp độ điều khiển khác nhau. Ở
bài tập này chúng ta tiến hành tự động hóa qua trình tàu dừng và đón
hành khách ở ga tàu. Để tối ưu hóa được năng suất và thời gian thì cần
phải tự động hóa cả những hành khách lên chuyến tàu. Cụ thể, mỗi hành
khách sẽ được coi như là các người máy.
Mỗi chuyến tàu và người máy lúc này sẽ được kết nối và điều khiển
bởi các luồng. Lúc này, mục đích hướng ta hướng tới là phải thiết kế, lập
trình sao cho các tiến trình phải đồng bộ hóa với nhau để qua trình tàu
đón khách ở ga đầy đủ các tiến trình : tàu dừng cho khách lên, hành
khách lên tàu và hành khách ngồi vào chỗ trống sau khi lên tàu. Trong
quá trình chạy cũng cần phải thỏa mãn các điều kiện để tối ưu.

1.2 Phương pháp giải quyết


Để có đạt được mục tiêu trên chúng ta cần phải có những chức năng
tối ưu nhất, gần như không được có sai sót và đáp ứng được yêu cầu đề
ra. Chúng ta cần nắm chắc, nghiên cứu rõ các giai đoạn của một chuyến
tàu, xác định chính xác công việc của từng giai đoạn.
Sau một thời gian thảo luận, nhóm em quyết định lựa chọn ngôn ngữ
lập trình C, biên dịch bằng “a test framework” do người ra đề tài cung
cấp và chạy thông qua Terminal trên hệ điều hành Ubuntu 18.04 để có
thể thực hiện tốt nhất project “Clatrain Automation”.
Cấu trúc, hàm chức năng của từng giai đoạn:
 Đoàn tàu đến ga và mở cửa:

4
station_load_train (struct station * station, int Count)
Hàm dùng để điều khiển tàu tham chiếu tới struct station gồm các
giá trị ghế trống, hành khách đợi ở ga, hành khách lên tàu và các biến
điều kiện khác, tham số count là số ghể trống.Khi thỏa mãn điều kiện
hành khách đợi ở ga > 0 và ghể trống trên tàu > 0. Khi đó tàu sẽ dừng và
thông báo cho tất cả hành khách đang đợi ở ga để lên tàu. Hàm chỉ được
chạy khi tàu ở ga và hoàn tất quá trình khách đã lên tàu.

 Khi hành khách đến ga tàu:


station_wait_for_train(struct station *station)
Hàm kiểm soát khách đang chờ đợi lên tàu, kiểm tra xem tàu có đủ
điều kiện đón khách hay không. Hàm chỉ hoạt động khi có tàu trong ga
và có chỗ trông trên tàu. Nếu hành khách đã lên đầy tàu hoặc tàu đã hết
ghế trống thì các hành khách còn lại phải dừng việc lên tàu và đợi tàu
khác đến. Trong quá trình lên tàu thì cập nhật lại số hành khách đang đợi
ở ga và số hành khách đã lên tàu.

 Khi hành khách đã lên tàu và ngồi vào chỗ:


station_on_board(struct station *station)
Hàm sẽ thực hiện quá trình thực sự cho hành khach ngồi vào chỗ
và cập nhật lại hành khách ở trên tàu và ghế trống. Nếu ghể trống trên
tàu đã hết hoặc hành khách đã ngồi hết vào chỗ thì thông báo tất cả các
hành khách đã ngồi vào chỗ thành công để tàu bắt đàu chạy,

5
1.3 Cách triển khai mã nguồn
Sau khi xác định toàn bộ chức năng của vấn đề được đặt ra, nhóm em
đã sắp xếp và sử dụng ngôn ngữ lập trình C để tạo thành một chương
trình hoàn chỉnh có thể đưa vào sử dụng.
Chương trình C hoàn chỉnh được biên dịch bằng “a test framework”
có sẵn do người ra đề tài cung cấp và được chạy thông qua Termial trên
hệ điều hành Ubuntu 18.04. Kết quả cuối cùng sẽ được hiển thị tại màn
hình giao diện Terminal.
II. Công việc thực hiện

Sau quá trình trao đổi và thảo luận, nhóm em đã thống nhất và đưa ra
công việc của từng các nhân. Bản thân em làm 2 nhiệm vụ chính là viết
hàm khởi tạo station_init() và station_load_train(). Các hàm trên đều
được viết bằng ngôn ngữ C, hoàn chỉnh cùng với các phần code khác và
biên dịch bằng “a test framework” có sẵn do người ra đề tài cung cấp,
chạy thông qua Termial trên hệ điều hành Ubuntu 18.04. Kết quả cuối
cùng sẽ được hiển thị tại màn hình giao diện Terminal như trong báo cáo
của nhóm.
Sau đây là mô tả mã nguồn cho các hàm mà em đã viết.
2.1 Mô tả mã nguồn cho hàm station_init()
Hàm station_init() sẽ khởi tạo các giá trị ban đầu cho cấu trúc station.
Số lượng ghế trống, hành khách đợi ở ga, hành khách lên tàu có giá trị
ban đầu bằng 0. Các hàm lock_init, cond_init dùng để khởi tạo giá trị
ban đầu cho khóa lock và 2 biến điều kiên Tau_den , Tat_ca_hk_len_tau.

6
Hình 1: Kết quả hàm station_init

2.2 Mô tả mã nguồn cho hàm station_load_train()


Luồng điều khiển hàm station_load_train() thực hiện lấy khóa bằng
cách gọi hàm lock_acquire() và tiếp tục thực thi hàm, các luồng điều
khiển hàm khác phải dừng thực thi. Count là biến chỉ ra số lượng ghế
trống trên tàu khi có một con tàu đến ga. Khi thỏa mãn điều kiện là có
hành khách đợi ở ga ( station -> hk_doi_o_ga > 0) và còn ghế trống trên
tàu ( station -> ghe_trong > 0 ) thì thực hiên cho tất cả các hành khách
bắt đầu lên tàu và phải chờ cho đến khi tất cả các hành khách lên tàu
ngồi vào chỗ thành công. Sau khi tàu rời đi, ghe_trong trở về 0 để bắt
đầu quá trình mới. Luồng điều kiên nhả khóa bằng cách gọi hàm
lock_release() đê cho các luồng khác thực thi.

7
Hình 2: Kết quả hàm station_load_train
III. Kết quả thu được

Các hàm đều đã có thể chạy được và đưa ra kết quả giống như mong
muốn của nhóm. Trong quá trình tìm hiểu và thực hiện bài tập lớn, em
cũng đã được tiếp cận với lập trình đa luồng để có thể áp dụng các kiến
thức được học trên lớp. Em hi vọng có thể nhận được các đóng góp của
thầy để có thể tối ưu hóa mã nguồn của mình hơn.

IV. Tài liệu tham khảo

[1] https://cseweb.ucsd.edu/
[2] https://web.stanford.edu/

Link Github của nhóm:


https://github.com/nguyentuanhung2557phamhaianh2358/pintosproject?
fbclid=IwAR0_zinqT4_VoGZ7dIvjcKVUzXnV4ZMklID0Tz5ucAC62vTIFxQ7GABz4
T0

8
9

You might also like