Dạ thưa. Tôi đã viết hệ điều hành cho MCU và ARM được khá lâu rồi ạ. Tôi không những đã xây dựng được hệ điều hành cụ thể mà cả mô hình hệ điều hành cho chúng, cùng với những thư viện cần thiết 7 năm rồi ạ, cùng cả mô hình mạng, hỏi vòng.... Tất cả đều bằng ASM, kiểu ASM đặc biệt cho chúng.
Khi viết những ứng dụng real time đó người ta đều sùng ASM. MCU thiết kế thông thường chạy một lệng hết 0,3 phần triệu giây, các chip tích hợp nhanh gấp mười, cũng chỉ vài lệnh hét 1/triệu giây. Để hệ thống trả lời trong 1/triệu giây cần cân nhắc từng chút một và cần viết ASM. Tôi đã phải trải qua những hỏi vòng, những nhiều đầu vào, những xác định mấy chu kỳ (do không sử lý kịp)....
PC không thể là một hệ thống real time nên tất cả những gì bám vào nó đều không đủ đáp ứng real time. PC được thiết kế để thực hiện giao tiếp người dùng-hệ thống. Vì người mắt tay đều chậm nên chẳng cần real time làm gì. Chính vì không được thiết kế real time nên các ngắt ngoài gây ra đều có buffer, chính buffer lại ngăn những khả năng real time của hệ thống. Trong máy tính, hệ thống real time duy nhất là RTC. RTC của máy 586 là con MC146818. Con này bao gồm 1 đồng hồ có đầu giao tiếp song song 8 bit, đầu ra gây ngắt và một ít ram. Sau này nó được tích hợp vào chip set, nằm trong PII X4. Để giao tiếp với nó dùng cổng 70h và 71h (addr và data).
http://pdf1.alldatasheet.com/datashe.../datasheet.pdf
Con này gây ngắt tối đa 1000 phát/giây, đã quá không thể chấp nhận với real time. Nhưng các buffer IO còn kéo chu kỳ xuống còn 1/vài chục giây.
Real time bắt buộc phải chạy trên hệ thống tính toán định hướng, một luồng và không cache. CHỉ trong những hệ thống đó mới có phân biệt trình tự trước sau, có phân biệt trình tự như thế mới có khái niệm thời gian, có khái niệm thời gian mới có khái niệm thời gian thực. Cấu tạo định hướng đó đã được PC chào từ Intel 286.
Hệ thống real time ổn định điển hình có một khái niệm là chu kỳ sử lý. Đây là đơn vị đánh giá quan trọng nhất của hệ. Khi đến đầu chu kỳ, máy đọc hết dữ liệu, sử lý và trả lời, tất cả phải diễn ra dưới thời gian 1 chu kỳ để sẵn sàng cho chu kỳ mới. Các chu kỳ cho máy in kim cổ lỗ đã phần vạn giây. Nếu sử lý khong kịp 1 chu kỳ phải nhạn ra lỗi, néu không được như thé thì hệ đổ vỡ. Bạn có biết người ta gọi hiẹn tược đổ vỡ đó là gì không: Vụ Nổ Tréc Nô Bưn.
Tôi nhắc lại những gì tôi đã viết nhé.
Cấu tạo máy tính của chúng ta ngày nay là cấu tạo vô hướng, cấu tạo scalar.
Cấu tạo đó mô tả như thế này:
có một con đường độc đạo các ô tô nối nhau đi, trong đó có rất nhiều biển: 29, 80, hải phòng, lạng sơn......
Yêu cầu là các ô tô có biển cùng tỉnh phải đi theo đúng thứ tự trước sau nhưng khác tính thì không cần.
Đoàn xe đi từ con đường độc đạo đến một bãi rộng.
Tự nhiên hình thành các đoàn xe cùng tỉnh đi hàng một và các đoàn này tách khỏi tỉnh khác.
Đoàn xe trở thành đoàn rất nhiều hàng dọc, mỗi hàng dọc một tỉnh, các hàng dọc tiến song song.
Đó là cơ chế pipe line, cơ sở của cấu trúc CPU hiện tại. Việc tách luồng tiến hành song song các luồng được làm một cách tự động, không cần phải nghĩ. Như tôi đã ví dụ, tính 1000!.
Nhìn lại đoàn xe trên. Tuy tằng tổng tốc độ thông qua của cả khối xe rất lớn nhưng tốc độ mỗi xe vẫn không nhanh hơn được. Đó là lý do PC không thể là các hệ thống real time. Một dữ liệu, ví dụ đọc ở đầu chu kỳ, vẫn phải trôi lâu đằng đẵng trong CPU, dù có đa luồng đa nhân đều không thể giảm thời gian một lệnh trôi trong sử lý, nó chỉ cho nhiều lệnh trôi đồng thời. Đó là lý do real time và cache kỵ nhau.
Những cái được coi là real time của PC như X windows (XII và X), RITAI linux đều chỉ đủ để xem multi media thôi. PC không thể có chu kỳ dưới 1/1000 giây về lý thuyết.
------------------
Trở lại vẫn đề chip của bạn chạy một nửa.
Thứ nhất, tôi hỏi bạn đã làm 1000 giai thừa tôi gợi ý chưa. Bạn đã thử open một tậo DOC 1000 trang ảnh và đánh máy vào trang đầu như tôi gợi ý chưa ????
Tôi đã thử điều đó trên cỗ máy 16 GB RAM, 4 CPU Xeon. Máy đa chip có chênh lệch tốc đọ lõi / tốc độ bus cao hơn nhiều 1 chip đa nhân, nên dễ bị nghẹt cổ chai hơn.
Bạn hiểu ý tôi nói chưa. Bạn hiẻu cái ngu của bạn chưa ????
CPU không cần người viết chương trình diễn giải song song bài toán của họ. Công việc đó được dùng cho những bài toán rất lớn, phải thực hiện nhiều lần trên nhiều máy tính chứ không phải trong 1 CPU. Như tôi đã nói nhiều lần mà bạn không hiểu, các nhà toán học đã nhét vào trong máy công cụ để tách luồng song song tự động, không khiến bạn làm.
Nếu bạn vẫn không hiểu thì tôi dẫn giải cái sai của bạn nhé. Những học sính mới học lập trình vài ngày rất hay gặp lỗi này: vòng lặp vô tận.
CPU có thể chọn ra những dãy dữ liệu liên quan và không liên quan, sử lý song song những dãy dữ liệu không liên quan. Đó là cơ chế pipeline, cấu trúc máy kiểu đó là cấu trúc vô hướng scalar.
Trên nguyên tắc đó, một while ngu ngốc không lối thoát không thể tách ra làm song song nhiều vòng. Vì những lệnh vòng sau, những dữ liệu vòng sau nằm trên chuỗi liên quan vòng trước. Vậy, gặp một vòng while ngu ngốc máy không thể kết thúc event và rơi vào tình trạng nghẹt event: "not responding".
Bạn đã hiểu rồi chứ. Có lẽ, tôi vẫn chưa tin là bạn hiểu, vì khả năng lập luận của bạn quá kém.
Bạn đã hiẻu rồi chứ, điều đó quá ngược với chu kỳ sử lý của real time, phải kết thúc thật nhanh. Bạn đã hiểu tôi đã định nghĩa hệ thống real time rồi chứ: là sự kết hợp của các cấu trúc cảm biến real time tốc độ cao và trung tâm sử lý mạnh. Đọc lại các bài trước của tôi nhé.
Đến bây giờ bạn đã hiẻu tại sao có một nửa rỗi rãi rồi chứ. Nếu chương trình, nói đúng hơn là cái vòng while ngu ngốc của bạn chạy trên 586 thì chỉ còn nước rút dây nguồn tháo pin bấm reset (nếu có). May là CPU của bạn 2 lõi, nên nó để rỗi một lõi để kết thúc cái vòng while ngu ngốc bằng task manager. Bạn đã hiểu chưa. Bạn đã biết công dụng của 1 nửa nghỉ ngơi chưa ????
Các máy hiện đại như IBP P590
http://www-03.ibm.com/systems/p/hardware/
Chúng chia mỗi CPU vật lý ra làm 10 phần. Khi bạn đến thua máy, tùy tiền của bạn mà họ cho bạn mấy cái 1/10 đó. Lỹ sự như bạn, nếu bạn không đủ tiền thuê một lõi vật lý thì không thể chạy chương trình sao ????
Và không ai mua chíp 2 lõi để chậm đi cả.
Bookmarks