30/09/2018, 20:46

Các hệ điều hành được viết như thế nào và viết bằng ngôn ngữ gì?

Ai cho mình hỏi khi cho có các hệ điều hành như Window hay IOS thì viết ngôn ngữ lập trình trên cái gì và chạy no bằng gì???

Ngô Doãn Tuấn viết 22:52 ngày 30/09/2018

hay IOS thì viết ngôn ngữ lập trình trên cái gì và chạy no bằng gì???

Chúng ta viết nó trên các trình soạn thảo(editor).
Và chạy nó với các trình biên dịch (compiler)

com0t viết 22:47 ngày 30/09/2018

viết nó trên trình soạn thảo khi không có hệ điều hành ha???

Ngô Doãn Tuấn viết 22:59 ngày 30/09/2018

khi không có hệ điều hành ha

Mình chưa hiểu ý bạn lắm.
Mỗi một hệ điều hành sẽ có hỗ trợ những trình soạn thảo cho bạn thoải mái sử dụng.
Đơn giản hơn thì bạn dùng IDE có tích hợp sẵn cả editor và compiler.

com0t viết 22:53 ngày 30/09/2018

ý mình là khi chưa có hệ điều hành thì viết chúng trên gì. Chạy bằng gì

Ngô Doãn Tuấn viết 22:59 ngày 30/09/2018

Chưa có hệ điều hành ???
Bạn dùng máy tính mà không có hệ điều hành ấy hả ?

com0t viết 22:48 ngày 30/09/2018

mình hỏi thế. Vì hệ điều hành cũng viết từ ngôn ngữ lập trình và cài nên máy tính mà

Người bí ẩn viết 22:50 ngày 30/09/2018

Câu hỏi hơi hack não đấy anh ạ. Ý của bạn topic có lẽ là " Ngôn ngữ lập trình xuất phát từ đâu " hay " ngôn ngữ lập trình được tạo ra nhờ cái gì ". Ý của mình thì ngôn ngữ lập trình được tạo ra trong 1 phòng thí nghiệm
Còn mấy cái ý nhỏ thì có nghĩa là Bạn ấy không biết người ta viết hệ điều hành bằng gì. Tức là viết Windows bằng cái gì ấy (bằng hệ điều hành khác hay cái khác …) khi chưa có Windows

com0t viết 23:00 ngày 30/09/2018

uk. đúng đó. ai chỉ tôi với

Người bí ẩn viết 22:47 ngày 30/09/2018

Cái này thì mình nghĩ chắc bạn phải tìm hiểu lịch sử thôi Search Google những từ khóa liên quan như: Lịch sử ra đời máy tính …

X viết 22:49 ngày 30/09/2018

Google với từ khóa History of programming languages

Đọc chơi cho biết : http://www.wikihow.com/Make-a-Computer-Operating-System

Phan Hoàng viết 22:58 ngày 30/09/2018

Hệ điều hành thực ra cũng chỉ là một cái App to nhất, chuyên để cấp phát bộ nhớ, quản lý các App (Process). Thế nên, trước khi có OS ra đời thì programer lập trình bằng các bìa đục lỗ -> các App nhỏ -> các OS nhỏ. Trên các OS nhỏ này -> viết nên các OS # như MS DOS -> trên MS DOS lại viết Windows OS (kiểu kiểu vậy thôi, nó cũng giống như các game 4 nút ý, các App game lúc đầu họ viết sơ khai bằng các ngôn ngữ của máy tính -> ngôn ngữ bậc thấp (assembler) -> ngôn ngữ bậc cao)

Doanh Văn Lương viết 23:02 ngày 30/09/2018

chắc ý của bạn hỏi là: khi chưa có hệ điều hành thì lập trình viên làm thế nào để viết lên một hệ điều hành, lấy cái gì để compiler ra.

Phan Hoàng viết 22:54 ngày 30/09/2018

Thời kỳ đầu thì chắc phải viết kiểu thô sơ nhất (giống kiểu đục lỗ trên bìa ý) 0101010000111 (mã opcode). Cái này thì máy hiểu luôn, không cần compile gì cả.

Dần dần những đoạn opcode này nhiều lên -> thành lib -> viết các compiler đơn giản (ngôn ngữ bậc thấp) -> viết ngôn ngữ bậc thấp rồi dùng compiler này để biên dịch ra opcode -> dần dần có nhu cầu viết phần mềm theo ngôn ngữ tự nhiên, xuất hiện các compiler và ngôn ngữ bậc cao.

Một số ngôn ngữ bậc cao, không compiler trực tiếp ra opcode mà compile ra mã trung gian, sau đó có một cái Runtime Compiler (JIT compiler) mới compile ra opcode. Cách tiếp cận này giúp cho các compiler đời sau có thể compile ra các mã opcode ngắn hơn, phù hợp với các command của CPU hơn (vì CPU cũng ngày càng trang bị thêm nhiều lệnh nữa) -> chạy nhanh hơn. Chính vì thế, compiler cũng tiến lên cùng với phần cứng.

Xuân Tâm viết 23:00 ngày 30/09/2018

Câu hỏi rất hay,
Các hệ điều hành được viết như thế nào. Câu hỏi này mình cũng đã từng hỏi và cũng đã từng thử sức viết một mini kernel.
Trước tiên nói xa xôi hệ điều hành có lẽ chúng ta nên hiểu một chút về cách thức hoạt động của máy tính nói gọn nhẹ hơn là một CPU hoạt đông như thế nào.
Tất cả những phần mềm này nọ dù có cao xa, to tác đến cỡ nào đi nữa thì nó cũng tìm đến CPU mà thực thi mà thôi.
Bây giờ một CPU hoạt động ra sao thì có lẽ mình không trả lời hết ở đây được. Nó lên quan đến Cấu Trúc Máy Tính.
Nhưng về cơ bản thì CPU cần lệnh để thực hiện những lệnh này được lưu ở đâu đấy trong bộ nhớ None_Voilate . (Flash, EEPRom,vv)
CPU được thiết kế để hiểu những dòng lệnh xác định sẵn, quy định riêng cho CPU đó.
Và các biểu diễn những dòng lệnh cơ bản ở mức thấp này người ta gọi là Assembly. (Người ta đặt tên gọi cho một lệnh có cấu trúc nào đó vd mã 0101010100110 tương ứng lệnh ADD,…vv)
Lệnh đó là gì là một tập hợp các bit 0 và 1 có độ dài và cấu trúc nhất định quy định cho CPU. Có nhiều các cấu trúc và tổ chức tập lệnh khác nhau . 2 cái thuật ngữ hay gặp nhất là CISC và RISC đấy.
Cụ thể CPU cứ đọc tuần tự các lệnh trong bộ nhớ chương trình ra và hoạt động.
Các lệnh lưu trong bộ nhớ chương trình sẽ có dạng như thế này

010101010010101110 -> Lenh 1 Vd :
------------------------------- Lenh 2

Vấn đề tiếp theo là làm sao để tạo ra những lệnh này. Ban đầu không còn cách nào khác các lập trình viên phải viết ở mức mã thấp này và ký hiệu lại bằng giả lệnh
ADD, MOVE, JUMP…v.
Tiếp theo nữa như điều tất yếu công việc viết code ở mức này khá vất vả cho lập trình viên. Họ bắt đầu tìm cách viết ra những phần mềm có thể hiểu được một ngôn ngữ mới mà họ vừa tạo ra ( sau này gọi là compiler). Tiếp theo là sự ra đời của các ngôn ngữ khác nhau với những compiler khác nhau.
Công việc cuối cùng cũng chỉ để làm ra chuỗi 00 11 kia cho đỡ vất vả … và hiệu quả nhất.

Quay trở lại câu hỏi , thế còn hệ điều hành? Thì câu trả lời là hệ điều hành cũng chỉ là một phần mềm. Chỉ có điều sứ mệnh của phần mềm này khác so với phần còn lại.
Công việc lập trình cứ tiếp tục tiếp diễn và dù cho chúng ta có sang tao ra nhiều ngôn ngữ đi chăng nữa, nhiều cách đơn giản để tạo ra đống mã 0 và 1 kia nữa…
Thì một điều sẽ đến và ắt đến song song với sự phát triển của CPU và phần cứng là “ Sử dụng tài nguyên không hiệu quả”.
Chúng ta không thể cứ lập trình xong rồi lại nạp vào cho CPU chạy mà không có một cách nào để quản lý nó và sử dụng hiệu quả nhất tài nguyên của CPU và các ngoại vi. Đơn giản giả sử bạn nạp một chương trình cho CPU chạy… bằng một đống 0 00 111 kia… Sau đó làm sao để bạn biết chương trình đó đang thực hiện ra sao
… nó chiếm bao nhiêu bộ nhớ, liệu nó có bị đơ hay không… Chưa kể đến cách quản lý tác vụ các Task, MultiTask, Làm sao để chay một lúc nhiều “Task”…vv
Đó là lúc người ta đã làm ra một chương trình chạy ôm trọn lấy tất cả những chức năng CPU có thể làm. Cung câp một môi trường làm việc cho các ứng dụng khác…
Khai thác tát cả những điểm mạnh mà phần cứng đang có… vvv. Đó là bài toán của hiệu suất và quản lý…

Đến đây thì việc hệ điều hành viết bằng gì chắc không còn quan trọng lắm nữa… Vì trải qua cả một quá trình dài chúng ta đã có đủ công cụ và ngôn ngữ để viết một “Phần mềm lớn” còn nó bằng gì “ LÀ tùy bạn .

Trương Hoàng Sang viết 22:46 ngày 30/09/2018

Câu trả lời của Xuân Tâm thật tuyệt.
Rất hay và đầy đủ… dể hiểu.
Cảm ơn rất nhiều

Lê Đức Anh viết 22:49 ngày 30/09/2018

Mình trả lời hơi muộn ^^!
Giống như chiếc máy tính đầu tiên được ra đời (chưa có hệ điều hành) người ta lập trình nó = mã nhị phân.
Những chiếc máy tính đời tiếp theo (thời Bill Gates) cũng không có hệ điều hành, người ta lập trình nó = ngôn ngữ BASIC (cái này lên wikipedia tra). Máy tính thời đó sẽ có 1 cái code editor như kiểu cmd của ms đó bạn, đen sì, sẽ viết code vào đó và compile ngay trên đó lun. Người ta gọi đó là Console Application đó bạn.
Nếu chưa hiểu hỏi mình nhé (PS: mình cx ko rõ cái máy tính thời bill gates có phải đời sau hay đời đầu, nhưng mình khá chắc nó dùng code editor (gần giống cmd) để lập trình nhé)

rogp10 viết 22:47 ngày 30/09/2018

Đầu tiên phải nói rằng hệ điều hành chính là thành quả của việc tự động hóa quá trình điều hành tác vụ. Nhiệm vụ chình của HĐH là giữ nhịp và quản lí tài nguyên hệ thống, và cung cấp các giao diện cho userspace.

Nói cách khác chính nó cũng là chương trình thôi

cdxf viết 22:46 ngày 30/09/2018

Vấn đề này thuộc phạm trù quả trứng và con gà: Không có compiler thì lấy gì để compile HĐH, không có HĐH thì lấy gì để compile chạy .
Để giải quyết đc cái catch-22 này thì chỉ cần nhớ 2 thứ:

  1. Nhiệm vụ của compiler là để trans từ 1 ngôn ngữ sang ngôn ngữ khác (cụ thể trong trường hợp này là mã máy) => chưa có compiler thì dùng assembler, chưa có assembler thì dùng đục lỗ.
  2. Compiler hay asm hay bất cứ chương trình gì đều có thể chạy mà không cần hệ điều hành. Nếu bạn chịu nghiên cứu quá trình từ lúc bấm nút power tới lúc nó hiện lên windows thì rất nhiều thắc mắc của bạn sẽ đc giải đáp
    Bắt đầu từ đây nhé:
    https://en.wikipedia.org/wiki/BIOS#Operation
    https://softwareengineering.stackexchange.com/questions/171127/how-do-operating-systems-run-without-having-an-os-to-run-in
    Nhưng nhìn chung để hiểu hết về mấy thứ này thì chắc phải đọc không ít sách.
Hung viết 22:58 ngày 30/09/2018

C hay C++ đều có bộ Compiler là self compiler, nghĩa là viết bộ compiler bằng C++ để biên dịch mã C++. Bản đầu tiên chỉ viết vài tính năng cơ bản (bản đầu tiên dựa trên compiler khác viết trên assembly), sau đó cải tiến dần dần (biên dịch trên compiler version trước). Bây giờ C++ mới có nhiều tính năng.

Do đó việc compiler C hay C++ viết bằng ngôn ngữ máy hay assembly cũng không hoàn toàn chính xác.

rogp10 viết 22:58 ngày 30/09/2018

Như vậy câu hỏi trở thành “chương trình đầu tiên (của máy đó) viết bằng gì”. Phân tích 1 lệnh x64 thì có 3 phần: operator, operand và prefix. Tất cả đều được viết bằng byte (không phải text), chỉ có mnemonic là tên đặt cho chúng. Từ level này (vì còn microcode nữa) thì có thể viết được assembler, sau đó dịch C ra assembly bằng trình biên dịch viết bằng assembler, và cuối cùng là mỡ nó rán nó.

Bài liên quan
0