Một hệ điều hành cung cấp môi trường thực thi cho các chương trình chạy trên nó. Nó cung cấp các dịch vụ chính xác cho từng chương trình, và từng người sử dụng chương trình. Các hệ điều hành khác nhau sẽ cung cấp các dịch vụ khác nhau, tuy nhiên chúng ta sẽ xem xét các dịch vụ chung nhất cho hầu hết các loại hệ điều hành. Sau đây là các dịch vụ mà một hệ điều hành thường có để cung cấp cho người dùng các tính năng tiện lợi.

  • User Interface: hầu hết các hệ điều hành đều có giao diện người dùng (User interface – UI). Giao diện này thường cung cấp một số form. Một là giao diện dòng lệnh Command-line interface (CLI), giao diện này sẽ dụng các lệnh dưới dạng text và một phương thức để nhập các dòng lệnh. Một dạng khác là batch interface, các lệnh và chỉ thị được lưu vào trong file, sau đó các file này được thực thi. Phổ biến nhất là giao diện đồ họa (Graphical user interface). Ở đây, giao diện chính là hệ thống các cửa sổ window và một bàn phím để nhập văn bản. Một vài hệ thống cung cấp 2 hoặc cả 3 dạng giao diện này.
  • Program execution: hệ thống phải có khả năng load các chương trình vào bộ nhớ và chạy các chương trình này. Chương trình phải có khả năng tự kết thúc việc thực thi của chính nó, bất kể là được thực thi bình thường hoặc không bình thường (có lỗi).
  • I/O operations: một chương trình đang chạy có thể đòi hỏi nhập/xuất, nghĩa là nó cần phải sử dụng file hoặc các thiết bị nhập xuất. Một số thiết bị đặc biệt có các chức năng đặc biệt (ví dụ như ghi nội dung ra đĩa CD hoặc DVD). Để hiệu quả và an toàn, người dùng không thường xuyên quản lý các thiết bị I/O một cách trực tiếp. Vì vậy, hệ điều hành cần phải cung cấp một sự cân bằng để thực hiện I/O.
  • Filesystem manipulation: một chương trình cần phải đọc và ghi các file, thư mục. Các chương trình này cũng cần tạo và xóa các file, tạo bởi chính nó, tìm kiếm file, liệt kê thông tin file. Sau cùng, một chương trình còn có khả năng cho phép hoặc từ chối việc truy xuất vào các file hoặc thư mục thuộc quyền quản lí của chương trình đó.
  • Communications: có rất nhiều nguyên nhân đòi hỏi một tiến trình phải trao đổi thông tin với tiến trình khác. Các giao tiếp này có thể xảy ra giữa các tiến trình đang được thực thi trên cùng một máy hoặc giữa các tiến trình được thực thi trên các máy tính khác nhau được kết nối thông qua mạng máy tính. Communication còn có thể được gọi đến bằng shared memory hoặc thông qua message passing (chuyển thông điệp), khi đó có các gói tin được hệ điều hành điều khiển di chuyển qua lại giữa các tiến trình.
  • Error detection: hệ điều hành cần phải được cảnh báo về các lỗi có thể xảy ra. Error có thể xảy ra bên trong CPU và bộ nhớ phần cứng (ví dụ như lỗi bộ nhớ hoặc lỗi nguồn – power failure), trong các thiết bị nhập xuất (ví dụ như ko kết nối được với mạng, thiếu giấy trong máy in…) và trong chương trình mà người dùng sử dụng (lỗi tràn số, truy cập vào địa chỉ bộ nhớ ko hợp lệ…). Ứng với mỗi loại lỗi khác nhau, hệ điều hành cần phải có một hành động thích hợp để đảm bảo tính chính xác và phù hợp trong tính toán. Tính năng gỡ lỗi (debugging facilities) có thể giúp cho user và programmer rất nhiều trong việc sử dụng hệ thống hiệu quả.

Một loại chức năng khác của hệ điều hành tồn tại không phải để giúp người dùng, thay vào đó, chức năng của nó là đảm bảo khả năng tính toán, làm việc hiệu quả của chính nó. Hệ thống đa người dùng có thể nâng cao độ hiệu quả bằng cách chia sẽ các tài nguyên máy tính giữa các user.

  • Resource allocation: khi có nhiều người dùng hoặc nhiều công việc được xử lí cùng lúc, tài nguyên phải được cấp phát cho mỗi người dùng hoặc công việc đó. Có nhiều loại tài nguyên được quản lí bởi hệ thống. Một số (như chu trình CPU, bộ nhớ chính, file storage) có mã cấp phát đặc biệt, còn những thứ khác (như I/O devices) có các yêu cầu phổ biến. Có thể lấy ví dụ như, trong việc xác định làm thế nào để sử dụng CPU một cách tốt nhất, hệ điều hành có các chu trình định thời CPU (CPU-sheduling routines) mà có thể tham gia vào thống kê tốc độ CPU, các công việc phải thực thi, số lượng các thanh ghi còn dùng được và nhiều thành phần khác. Còn có thể có các chu trình để cấp phát máy in, modems, đĩa cứng gắn ngoài USB và các thiết bị thứ cấp khác.
  • Accounting: chúng ta luôn muốn đánh dấu thông tin về việc người dùng nào sử dụng loại tài nguyên nào và sử dụng bao nhiêu. Các thông tin này có thể dùng cho kế toán hoặc đơn giản dùng cho việc thu thập số liệu tài nguyên sử dụng. Số liệu thống kê sử dụng có thể là một công cụ giá trị cho người nghiên cứu có thể reconfig hệ thống để nâng cao các dịch vụ tính toán.
  • Protection and security: người sở hữu các thông tin được lưu trữ trong hệ thống multiuser hoặc hệ thống mạng máy tính có thể muốn kiểm soát việc sử dụng các thông tin này. Khi nhiều tiến trình khác nhau được thực thi cùng lúc, một tiến trình không nên có khả năng can thiệp vào các tiến trình khác hoặc can thiệp vào tiến trình của hệ điều hành. Protection cần dùng để đảm bảo tất cả các truy cập vào tài nguyên hệ thống đều được quản lí, điều khiển. Việc bảo mật hệ thống từ các yếu tố bên ngoài cũng rất quan trọng. Các hệ thống bảo mật này bắt đầu với việc yêu cầu mỗi người dùng xác nhận bản thân với hệ thống, thường là dùng password, để có thể truy cập vào các tài nguyên của hệ thống. Nó còn mở rộng đến việc bảo vệ các thiết bị I/O bên ngoài như modems, network adapters từ các truy cập trái phép và ghi lại tất cả các kết nối này để phát hiện lỗ hổng. Nếu một hệ thống được bảo vệ và an toàn, các giải pháp bảo vệ phải được xậy dựng cho mọi thành phần của hệ thống.