컴퓨터와 운영체제를 왜 배워야 할까?
이것은 팀 프로젝트를 하면 바로 알 수 있다.
분명히 같은 코드를 짰는데도 어떤 컴퓨터에서는 제대로 작동되고, 어떤 컴퓨터에서는 제대로 작동되지 않는다.
컴퓨터의 구조가 다르거나 운영체제가 다른 경우 이렇게 다른 결과가 나올 수 있다.
또한, 클라우드 서비스를 이용해 서버를 만들 때 cpu, 메모리, 저장 용량을 설정해야 한다.
컴퓨터의 구조에 대해서 이해하고 있어야 설정이 가능하다는 얘기다.
또한, 운영체제가 없다면 개발자들은 하드웨어에 접근하는 코드를 직접 작성해야 하므로 번거로워진다.
개발자로서 컴퓨터와 운영체제에 대해 잘 아는 것은 필수라고 할 수 있다.
따라서 컴퓨터 구조와 운영체제에 대해서 공부해보도록 하겠다.
1. 운영체제의 개념
운영체제는 하드웨어 자원을 관리하여 시스템 및 응용 프로그램의 실행에 도움을 제공하며 사용자와 하드웨어 사이에서 중재자 역할을 수행함
👉 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 사용자가 보다 편리하게 컴퓨터를 이용할 수 있도록 도와주는 프로그램
- 정의
컴퓨터의 주기억장치 내에 상주하여 컴퓨터 시스템의 자원 관리, 응용 프로그램의 수행 제어, 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스 담당 관리하는 자원(CPU, 기억장치, 입출력장치 등)
- 목적
- 컴퓨터 시스템의 효율적인 관리와 사용
- 신뢰도, 처리량 향상
- 응답 시간 단축
목적을 요약하자면 위와 같다.
아래에서 좀 더 풀어서 작성해보겠다.
1) 사용자 측면
사용자가 프로그램을 편리하고 효율적으로 수행할 수 있는 인터페이스 환경(GUI) 제공
2) 시스템 측면
제한된 컴퓨터 하드웨어를 효율적으로 관리하여 시스템 성능을 극대화함
- 처리량 증대
- 처리량: 단위 시간당 처리할 수 있는 작업량
- 시스템내의 제한된 자원들을 유휴 상태가 발생하지 않게 균형있고 효율적으로 자원 사용을 유도하면 처리량은 증가하게 됨
- 응답시간 단축
- 응답시간: 작업이 시작(제출)된 시간에서부터 끝날 때까지 소요된 시간
- 시스템의 부하에 상관없이 일정한 작업은 언제나 예측할 수 있는 경과 시간으로 종료될 수 있어야 함
- 가용성(사용 가능도) 증대
- 가용성: 데이터 처리를 위해 작업이 필요로 하는 자원들이 고장 등이 발생하지 않고 시스템을 얼마나 빨리 정확하게 사용할 수 있는가를 나타낸 것
👉 시스템을 고장 없이 계속 사용할 수 있는지를 나타낸 것 - 필요시에 즉시 고장 없이 정확하게 동작할 수 있는 사용 가능성이 높은 시스템으로 설계되어야 함
- 가용성: 데이터 처리를 위해 작업이 필요로 하는 자원들이 고장 등이 발생하지 않고 시스템을 얼마나 빨리 정확하게 사용할 수 있는가를 나타낸 것
- 신뢰도 향상
- 신뢰도: 시스템이 주어진 환경 아래에서 얼마나 원활하게 기능을 수행할 수 있는가
- 시스템을 사용하는 도중에 발생하는 내부, 외부적인 오류없이 정확하게 동작하도록 시스템이 설계되어야 함
- 역할 및 기능
- 사용자와 컴퓨터 시스템 간의 인터페이스 정의
- GUI (Graphic User Interface) , CLI (Command Line Interface)
- CPU 스케줄링
- 매 시점 어떠한 프로세스에 CPU를 할당해 작업을 처리할 것인지 결정
- 이를 통해 자원을 효과적으로 운영 가능
- 특정 프로세스 불이익 방지
- 방식: 선입선출(FCFS: First Come First Served), 라운드 로빈, 우선순위
- 주소를 통한 메모리 관리
- 메모리의 어느 부분이 어떤 프로그램에 의해 사용되고 있는지 파악해서 관리
- 메모리가 필요한 프로그램에 할당, 필요하지 않을 때 회수
- 다수의 사용자 프로그램이 서로의 프로세스 영역을 침범하지 않도록 보안 유지 - 방식: 고정분할, 가변분할, 가상메모리
- 메모리의 어느 부분이 어떤 프로그램에 의해 사용되고 있는지 파악해서 관리
- 인터럽트 interrupt
- 주변장치 및 입출력 장치 관리 메커니즘
- 입출력 장치: 키보드, 모니터
- 보조기억장치: 하드디스크 - 방식: 신호, 인터럽트 처리루틴, 컨트롤러
- 주변장치 및 입출력 장치 관리 메커니즘
- 프로세스 관리
- 프로세스의 생성과 삭제
- 자원 할당 및 반환
- 프로세스 간 협력
이 외에도 데이터에 대한 보안 및 통신 네트워크의 관리, 명령어 해석기 등 다양한 기능을 제공한다.
2. 운영체제의 종류
운영체제의 종류는 매우 다양하지만 가장 보편적으로 사용되는 운영체제(Windows, UNIX, Linux)에 대해서 알아보겠다.
- Windows
- 정의: 마이크로소프트에서 개발하는 컴퓨터 운영체제이자 가장 대표적인 운영체제
- 특징: 데스크탑에 사용되는 운영체제 중에서 가장 많은 점유율을 차지함
- 장점
- 사용자에게 최적화가 가장 잘 되어있는 운영체제(명령의 입력이 아닌 클릭으로 기능 수행)
- 프로그램들이 일관성이 있어 다른 프로그램들도 적응하기에 어려움이 없음
- 단점
- 오픈소스가 아니고 유료임
👉 사용자가 변경하여 이용할 수 없음,
버그가 발생하거나 에러가 발생해도 개발자가 응답해주기 전까지 기다려야 함 - 개발자를 위한 환경을 제대로 갖추지 않음
👉 개발할 때는 거의 사용되지 않음
- 오픈소스가 아니고 유료임
- UNIX
- 정의: 현대적 컴퓨터 운영체제의 원형이 된 운영체제
- 특징
- 운영 체제가 C언어로 쓰여져 있고 소스코드를 쉽게 구할 수 있어 다른 컴퓨터 하드웨어나 새로운 기종에 적은 노력으로도 쉽게 이식할 수 있음
👉 다양한 새로운 컴퓨터들의 운영체제로 채용됨
👉 현대의 컴퓨터 운영체제는 윈도우 계열을 제외하면 대부분 유닉스에서 파생된 것 - 서버 운영의 필수적인 CLI가 강해서 서버 시장에서는 Windows 이상으로 인기가 좋음
- 운영 체제가 C언어로 쓰여져 있고 소스코드를 쉽게 구할 수 있어 다른 컴퓨터 하드웨어나 새로운 기종에 적은 노력으로도 쉽게 이식할 수 있음
- 장점
- 현존하는 운영체제 중 가장 이식성이 높음: C언어 사용, 소스코드 쉽게 구할 수 있음
- 안정성: 오랜 기간 발전해 옴, 위협으로부터 대응하기 위해 업계 표준의 다양한 보안 기능 탑재
- 단점
- 하드웨어 호환성이 윈도우즈에 비해 낮음
- 멀티미디어를 사용하기 어려움
- Linx
- 정의: 커널의 일종인 리눅스 커널을 사용하는 운영체제
- 특징
- 완전히 무료이고 오픈 소스
👉 리눅스 커널을 기업 or 개인이 사용하여 자신만의 운영체제로 완성시켜 배포 or 판매 가능 - 현재도 계속 개발되고 개선되고 있는 운영체제. 무한한 성장 가능성이 있는 운영체제
- 대표적인 배포판 리눅스
- 데비안 계열: 데비안, 우분투, 칼리 리눅스, 구름 OS
- 레드햇 계열: 레드햇 엔터프라이즈 리눅스, CentOS, 붉은 별
- 안드로이드 계열: 안드로이드, 크롬 OS
- 완전히 무료이고 오픈 소스
- 장점
- 오픈소스
👉 사용자가 원하는 대로 수정하여 이용가능,
버그나 에러사항이 발생했을 때 사용자가 그 자리에서 개선할 수 있음
- 오픈소스
- 단점
- 커널들과 소스들이 잘 정리되어 있지 않음
- 오픈소스
👉실시간으로 처리해주는 것이 미약함, 보안에 취약함
- 정리
구분 | Windows | UNIX | Linux |
장점 |
|
|
|
단점 |
|
|
|
3. 운영체제 구조
- 인터페이스(CUI, GUI)
- 의미: 사용자가 전자장치와 상호 작용할 수 있도록 도움을 주는 시스템
- 참고 사항: 인터페이스에서 GUI가 없고 CUI만 있는 리눅스 서버도 존재함
- 커널 Kernel
- 역할
- 컴퓨터 하드웨어와 프로세스의 보안, 자원 관리, 하드웨어 추상화
- 자원 관리를 위해 CPU 스케줄링, 메모리 관리, 입출력 관리, 파일 시스템 관리 등을 담당함
- 이중 모드
운영체제는 커널에서 관리하는 중요 자원에 사용자가 쉽게 접근하지 못하도록 커널 모드와 사용자 모드로 모드를 나눈다.
두 가지 모드를 구분하는 방법은 modebit이다.
시스템 콜이 작동될 때 modebit을 참고해서 사용자 모드(유저 모드)와 커널 모드로 구분한다.
여기서 modebit이란 1 또는 0의 값을 가지는 플래그 변수이다.
modebit의 값이 1이면 사용자 모드, modebit의 값이 0이면 커널 모드이다.
커널 모드에서는 하드웨어에 직접 접근해 메모리, CPU와 같은 자원을 사용할 수 있다.
사용자 모드에서는 커널 모드의 자원에 접근할 수 없게 제한을 둔다.
그러면 사용자 모드에서 자원에 접근하려면 어떻게 해야 할까?
이것과 관련된 것이 시스템 콜이다.
- 시스템 콜
사용자 모드에서 실행된 프로세스가 자원에 접근하려면 시스템 콜을 호출에 커널에 요청해야 한다.
- 정의: 사용자 모드에서 커널 모드에 접근해 필요한 기능을 수행할 수 있게 하는 시스템 함수
- 동작: 시스템 콜로 받은 요청을 처리한 후 다시 시스템 콜로 결과 값을 반환
- 기능
- 프로세스 제어
- 파일 조작
- 장치 관리
- 데이터의 유지 보수
- 통신
- 보호
- 장점
- 시스템 콜은 하나의 추상화 계층이기에 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 많이 신경쓰지 않고 프로그램을 구현 가능
- 예
- fork(): 프로세스 생성
- wait(): 부모 프로세스가 자식 프로세스의 수행을 기다림
- 드라이버
- 의미: 하드웨어를 제어하기 위한 소프트웨어. 하드웨어와 커널 사이에서 명령어나 데이터를 전달해주는 역할
- 드라이버는 장치에 의존적이기에 각각의 장치마다 장치 드라이버가 존재함
참고
조영성 외 1명, 「정보처리 자격증 취득을 위한 운영체제론」, 북스홀릭퍼블리싱, 2021, p.14-29
이수진, 「기술 면접 대비 CS 전공 핵심요약」, 도서출판 길벗, 2023, p.18-21
'Computer Science > OS' 카테고리의 다른 글
[OS] 시스템 콜 System Call (0) | 2024.06.16 |
---|---|
[OS] 인터럽트 (0) | 2024.06.16 |
[OS] CPU 스케줄링 알고리즘 (2) | 2024.06.16 |
[OS] 프로세스와 스레드 (0) | 2024.06.13 |
[OS] CPU와 메모리 구조 (0) | 2024.06.13 |