- vừa được xem lúc

Process (Máy tính) và những điều có thể chưa biết - Phần II - Multitasking

0 0 5.2k

Người đăng: Nguyen Viet

Theo Viblo Asia

Tiếp nối phần I mình đã tìm hiểu Process như thế nào, các component của 1 Process, và cách Process hoạt động. Phần tiếp theo này chúng ta cùng xem liệu Multitasking có phải là bến đỗ hạnh phúc khi muốn optimize thời gian chạy của 1 chương trình

Vậy Multitasking là gì? Bản chất nó là một phương thức cho phép nhiều Process cùng chia sẻ các vi xử lý (CPUs) và các tài nguyên khác của hệ thống. Mỗi CPU (Core) chỉ thực thi 1 tác vụ (Task) tại 1 thời điểm duy nhất. Tuy nhiên Multitasking cho phép mỗi một CPU có thể chuyển đổi giữa các tác vụ đang thực thi mà không cần phải chờ từng tác vụ kết thúc. Tuỳ theo mỗi hệ điều hành mà việc chuyển đổi này có thể xảy ra khi các tác vụ đầu ra vào (I/O Operation) được khởi tạo và chờ kết thúc, hay khi một tác vụ nào đó giải phóng khỏi CPU, hay khi có ngắt phần cứng (Hardware Interrupts) và khi bộ lập lịch của hệ điều hành quyết định một Process nào đó đã hết thời gian sử dụng CPU để chạy

Một dạng phổ biến của Multitasking là phương thức để xen kẽ việc thực thi của các Process cũng như Thread, và thậm chí là cả các tác vụ chạy riêng của Kernel , hay còn được gọi là CPU's time-sharing. Mặc dù tính năng sau chỉ khả thi trong các nhân ưu tiên như Linux. Preemption có một side-effect khá quan trọng cho các Process có tương tác, vì được ưu tiên đối với các CPU bound Process. Thường sẽ có 2 loại Process:

  • CPU bound là các Process có tốc độ thực thi phụ thuộc vào tốc độ CPU. Một tác vụ thực hiện việc tính toán trên một tập nhỏ các số, ví dụ nhân 2 ma trận, tính số thập phân của số PI
  • I/O bound là các Process có tốc độ thực thi phụ thuộc vào tốc độ hệ thống I/O. Ví dụ như tương tác với ổ đĩa (Disk) hay networking. Một chương trình đọc file là 1 I/O bound Process bởi vì nó bị bottleneck khi đọc dữ liệu từ Disk Thế nên người dùng sẽ ngay lập tức được cấp tài nguyên máy tính khi bấm một phím hay khi di chuyển chuột. Trong hệ thống chia sẻ thời gian (time-sharing systems), context switches được thực hiện rất nhanh, thế nên cảm giác như nhiều Process được thực thi một cách đồng thời trên cùng một CPU. Việc thực thi động thời nhiều Process được gọi là Concurrency. Mình xin lưu ý là Concurrency not Parallel. Mình sẽ có một bài viết chia sẻ về topic này. Hoặc các bạn có thể tham khảo ở đây

Thông thường một Process của hệ thống máy tính sẽ bao gồm: Image là mã máy có thể thực thi giao tiếp với một chương trình Memory (thường là Virtual Memory) là nơi bao gồm mã thực thi, dữ liệu I/O, một call stack (theo dõi các chương trình con đang hoạt động), một heap để lưu trữ các dữ liệu tính toán tạm thời trong thời gian chạy (runtime) OS descriptor được phân bổ cho các Process, Data Source, Data Sink Thuộc tính Security như thông tin người sở hữu Process, danh sách quyền của Process đó Trạng thái CPU như là nội dung các thanh ghi (registers) và địa chỉ vật lý của bộ nhớ.

Các thông tin trên sẽ được hệ điều hành lưu trữ dưới dạng dữ liệu có cấu trúc gọi là Process Control Block

Hệ điều hành sẽ giữ các Process tách biệt hoàn toàn với nhau, và cấp phát tài nguyên khi Process cần, thế nên các Process sẽ không ảnh hưởng lẫn nhau và gây lỗi hệ thống (ví dụ như Deadlock, Thrashing). Hệ điều hành cung cấp cơ chế cho việc giao tiếp giữa các Process để cho phép các Process tương tác một các an toàn

Đến đây các bạn có thể thấy việc thực thi Multitasking sẽ giúp các ứng dụng có thể chạy một cách đồng thời và giải quyết vấn đề Latency trong hệ thống khi việc thực thi các tác vụ sẽ làm việc theo cách bất đồng bộ. Khái niệm Asynchronous hay Concurrency trong bài viết các bạn sẽ gặp rất nhiều trong các ngôn ngữ phát triển như NodeJS với Event loop, Golang với Goroutine .... Ý tưởng triển khai các bạn sẽ thấy khá giống nhau khi việc xử lý các bạn có thể xử lý Multitasking. Phần tiếp theo mình sẽ đưa thêm các ví dụ cụ thể khi triển khai trong ngôn ngữ Go. Have a nice day

Bình luận

Bài viết tương tự

- vừa được xem lúc

Lập trình và tư duy thuật toán sáng tạo (Kì 2) - Tóm lược kiến thức đại số tổ hợp

Trong phần đầu Lập trình và tư duy thuật toán sáng tạo (Kì 1) Mình đã giới thiệu về khái niệm, lý do bạn cần sử dụng thuật toán và những điều cơ bản đề giải quyết một bài toán. Và giờ thì chúng ta bắt đầu tìm hiểu xem thế giới "diệu kỳ" này có gì nhé.

0 0 174

- vừa được xem lúc

Process (Máy tính) và những điều có thể chưa biết - Phần I

Chào anh em một buổi sáng đầy năng lượng. Lý do mình viết bài chia sẻ này vì có 2 vấn đề mình thấy rất nhiều bạn gặp phải.

0 0 161

- vừa được xem lúc

Tìm hiểu khái niệm Hash Table

Có lẽ khái niệm này cũng không quá xa lạ gì với các anh em Engineer và bản thân mình sau 2 năm đầu đi làm và lần đầu tiên nghe về khái niệm này cũng hiểu một cách rất là mơ hồ . Yeah và dĩ nhiên không để nỗi đau thêm dài (thật ra mình tò mò là chính) nên mình cũng tìm hiểu về cách làm việc của Hash

0 0 134

- vừa được xem lúc

Thuật toán Apriori khai phá luật kết hợp trong Data Mining

Bài toán khai thác tập phổ biến (frequent itemset) là bài toán rất quan trọng trong lĩnh vực data mining. Bài toán khai thác tập phổ biến là bài toán tìm tất cả tập các hạng mục (itemset) S có độ phổ

0 0 506

- vừa được xem lúc

Series Data structures and algorithms

Giới thiệu. Xin chào các bạn. Tổng quan. Hàng ngày, chúng ta vẫn thường xuyên sử dụng các cấu trúc dữ liệu như Array,Map.

0 0 139

- vừa được xem lúc

Singly Linked List

Tổng quan. Hai bài trước chúng ta đã tìm hiểu về Array và Hash Table.

0 0 152