운영체제의 기능

kakasoo·2021년 9월 10일
0

운영체제

목록 보기
2/3
post-thumbnail

운영체제 위에 모든 프로세스가 동작한다. 그러니 운영체제를 함부로 건드려서는 안 된다.


운영체제의 기능


운영체제는 일단 아래 5가지의 필수 기능과 몇 가지 부가적인 기능을 수행한다.

  1. 메모리 관리
  2. 프로세스 관리
  3. 입출력 장치 관리
  4. 파일 관리
  5. CPU 관리
  6. 보안 관리
  7. 네트워킹 & 분산 관리
  8. 명령어 인터프리터 : Shell을 이용하여 직접 커널 명령어를 사용하게 해주는 기능

일단이라고 말한 건, 마이크로 커널에서는 몇몇 기능을 사용자 모드로 돌렸기 때문이다. 이상의 내용은 추후, 마이크로 커널에 대해 설명할 때 이어서 설명하겠다. 일단 각 기능을 차례대로 보자.

메모리 관리

프로그램과 프로세스의 차이는 파일이 적재된 위치이다. 프로그램은 보조기억장치에 있는데, 이게 주기억장치인 메모리에 올라오게 되면 이 때부터는 프로세스라고 부른다. 바탕화면에서 실행 아이콘을 더블클릭을 하는 것도 프로그램을 메모리 상에 올리는 작업이다.

간단한 작업이지만, 이런 실행 사이에는 메모리에 파일을 넣기 위해 어느 정도의 공간이 필요하고 현재 남은 메모리 공간은 어느 정도인지, 만약 들어간다면 어디서부터 어디까지가 이 파일인지 관리해줄 필요가 있는데, 이런 기능을 운영체제가 수행한다.

프로세스 관리

메모리에 프로그램을 올렸으면, 이제부터는 프로세스다. 당연히 프로세스가 되었다고 해서 다 끝난 게 아니다. 다중 프로그래밍 시스템 이후부터의 운영체제는 말 그대로 여러 개의 프로세스를 다룰 수 있게 되었다. 따라서 프로세스 사이에서도 관리가 필요하다.

  1. 프로세스 생성 : 프로그램을 메모리에 올라가기 적합한 형태로 바꾼다.
  2. 프로세스 중지
  3. 프로세스 재실행
  4. 프로세스 삭제
  5. 프로세스 동기화
  6. 프로세스 상호 통신
  7. 교착 상태의 방지

다시 이러한 일을 수행한다. 생성부터 삭제까지의 의미는 명확하니, 동기화, 상호 통신, 방지에 대해서 이야기하자면, 사실 프로세스 여러 개가 하나의 목표를 위한 것일 수도 있다. 비유하자면 여러 명이 하나의 영화관 티켓을 예매하는 경우를 생각해볼 수 있겠다. 동시에 예약을 했다고 하더라도 미세한 차이로 누군가 한 명만이 예약되어야지 않을까. 이런 상황을 두고 동기화되었다고 말한다. 프로세스가 어떤 자원에 접근하고 있다면 다른 프로세스는 접근을 잠시 미뤄두고 대기해야 한다. 이런 상황에서는 프로세스 간에 통신이 필요한데, 직접적으로 프로세스가 이야기하는 게 아니고 운영체제가 이 사이를 중재해줘야 한다.

마지막 교착은, 프로세스가 동일한 자원에 접근할 때 순번을 기다리게 되는, 장기간에 걸친 대기 상태가 나타나는 것을 말한다. 이게 발생하는 조건과, 또 이를 해결하기 위한 방법들이 존재하는데 당장은 운영체제가 교통 정리를 잘 해줘서 처리해준다고만 이해하면 되겠다.

입출력 장치 관리

  1. 사용자가 입출력에 대한 하드웨어 특성을 알지 못해도 사용하는 데에 지장이 없도록 한다.
  2. 프로세서와 입출력 기기 간의 처리 속도 차이를 해결한다. ( ex. 버퍼링 )

사실 저장 장치에도 디스크, USB, 출력 장치에도 스캐너나 프린터 등 다양한 장치들의 차이에 대해서 알지 못해도 되고, 입력이 컴퓨터의 성능을 저하시킬까봐 불안할 필요도 없다. 이런 특성들은, 혹시 우리가 알지 못하는 새로운 입출력 장치가 출현하더라도 사용하는 데에 지장이 없도록, 운영체제의 확장성을 보장해주는 요인이 된다.

파일 관리 기능

다양한 저장 장치들을 동일한 방식으로 사용할 수 있도록 기능을 제공하고, 파일과 폴더의 생성, 제거 등을 쉽게 사용할 수 있도록 한다. 운영체제마다 각기 다른 파일 시스템을 사용한다.

각 운영체제의 파일 시스템
Windows 98를 포함한 구형 Windows : FAT, FAT32
Windows 7,8,9,10,11 : NTFS
Linux : ext2, ext3
UNIX : nfs

이 외 다른 기능들에 대해서는 추후 별도의 장에서 설명한다.

profile
자바스크립트를 좋아하는 "백엔드" 개발자

0개의 댓글