일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 프리코스
- 플레이스토어 비공개 테스트
- 설계
- 플레이 스토어 20명
- 구글 비공개 테스트 20명
- git
- 클린코드
- 커밋 메시지
- 우테코
- 구글 플레이 스토어 배포 방법
- 기능명세서
- 운영체제 #CS지식
- 구글 플레이 비공개 테스트
- 객체지향
- 객체지향설계
GYUD-TECH
[OS 모의 면접 스터디] 운영체제 개요 본문
프로젝트를 진행할 때, AWS EC2 서비스를 사용하면서 주로 리눅스 서버를 선택하여 사용하였다.
왜 리눅스 서버를 사용하는지, 리눅스 서버가 어떤 기능을 제공하고 어떻게 동작하는지는 모른 채 단순히 서버는 보통 리눅스를 사용한다는 이유로 서버를 선택했었다.
요즘에 클라우드와 도커와 관련된 개념을 공부하면서, 내가 한 선택에 왜 라는 질문을 달아보니 근거가 없이 대부분 사람들이 하는 방식을 따라했던게 많았던 것 같다.
서비스 마다 요구사항과 환경이 다르기 때문에 서비스에 맞는 선택을 해야한다는 것을 요즘 느끼고 있는데, 운영체제에 관한 지식이 이러한 선택을 하는데 도움을 준다고 생각하여 OS 면접 스터디에 참여하여 운영체제를 다시 복습하는 중이다.
이화여대 반효경 교수님의 "운영체제와 정보기술의 원리"를 참고하여 공부하고 스터디원들과 함께 이야기를 나눌 예정이다.
https://www.aladin.co.kr/shop/wproduct.aspx?ISBN=K762639583&start=pnaver_02
운영체제와 정보기술의 원리
온라인 공개강좌 KOCW에서 꾸준히 호평받아온 이화여대 반효경 교수의 컴퓨터 입문서이다. 단순히 컴퓨터 관련 전문 지식을 전달하는 것에서 그치지 않고, 복잡한 문제를 효율적으로 풀 수 있는
www.aladin.co.kr
운영체제의 핵심에 대해서 이해하기 쉽게 설명해주고 있어서, 운영체제를 공부하고 싶은 사람은 읽어보는 것을 추천한다.
운영체제란?
운영체제의 정의
컴퓨터 하드웨어 위에 설치되어 있는 사용자 및 다른 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
이러한 운영체제는 규모가 매우 크기 때문에 전체가 메모리에 올라가면 메모리 공간이 낭비된다.
따라서 운영체제 중 항상 필요한 부분만 메모리에 상시적으로 올리고, 나머지 부분은 필요할 때 올린다.
이때 메모리에 항상 상주하는 운영체제 부분을 커널 이라고 한다.
좁은 의미의 운영체제는 운영체제의 핵심 부분인 커널만을 뜻한다.
반면 넓은 의미의 운영체제는 커널 뿐 아니라 각종 주변 시스템 유틸리티까지 포함한다.
운영체제의 역할
운영체제의 대표적인 역할은 아래와 같다.
1. 사용자가 편하게 컴퓨터 시스템을 사용할 수 있도록 편리한 인터페이스를 제공해준다.
사용자의 입장에서 하드웨어를 다루는 것을 모두 공부하는 것은 어렵기 떄문에 운영체제는 사용자를 도와 하드웨어의 자원을 쉽게 사용할 수 있도록 편리한 인터페이스를 제공해준다.
운영체제가 하드웨어를 직접 다루어 주기 때문에 사용자 및 프로그램은 자신이 독립적으로 컴퓨터를 사용한다고 느끼고 프로그램을 동작시킬 수 있다.
다양한 사용자 및 프로그램을 제어하는 운영체제가 존재하기 떄문에 노래를 들으면서 게임을 하듯이 동시에 여러 프로그램을 실행 시키는 것도 가능하다.
2. 컴퓨터 시스템의 자원을 효율적으로 관리한다.
운영체제는 CPU, 메모리, 하드디스크 등 하드웨어 자원 뿐 아니라 소프트웨어 자원까지 모두 관리한다.
주어진 자원으로 최대한의 성능을 내도록 효율성을 높이고, 특정 프로그램이나 특정 프로그램이나 사용자에게 불이익이 발생하지 않도록 자원을 관리하는 형평성을 조율하는 역할을 수행한다.
3. 사용자와 운영체제 자신을 보호한다.
악의적인 프로그램이 다른 프로그램의 메모리 영역을 참조한다던가, 컴퓨터에 장애를 일으키는 행동을 하면 자원을 빼앗아서 프로그램이 실행 되지 못하도록 하는 역할을 수행한다.
주로 CPU를 컴퓨터의 두뇌라고 부르지만, 운영체제가 두뇌의 역할을 한다고 생각했다.
CPU는 계산을 하는 것일 뿐, 상황에 따라서 판단을 하고, 명령을 내리는 것은 운영체제이기 때문에 운영체제가 컴퓨터의 두뇌와 같은 역할을 한다고 생각하였다.
운영체제의 분류
운영체제를 분류하는 기준에는 아래와 같은 것이 있다.
동시 작업 가능 여부
단일 작업
한번에 하나의 작업만 처리하는 것을 뜻하며, 한가지 명령을 끝내기 전에 다른 명령을 수행할 수 없다.
ex) MS-DOS
다중 작업
CPU와 메모리를 공유함으로써 동시에 두개 이상의 작업을 처리하는것이 가능하다.
CPU를 시간에 따라 동시에 사용하는 것처럼 보이게 하는 방법을 시분할 시스템 이라고 하고, 메모리 공간을 나누어 사용하는 것을 다중 프로그래밍 시스템 이라고 한다.
ex) UNIX, MS Windows
사용자의 수
단일 사용자 운영체제
단일 사용자만이 사용할 수 있는 운영체제이다.
ex) MS-DOS, MS Windows
다중 사용자 운영체제
여러명이 동시에 사용할 수 있는 운영체제로 한개의 컴퓨터에 여러 사용자가 터미널로 접속해서 사용할 수 있다.
이러한 장점으로 주로 서버 컴퓨터의 운영체제로 사용되기도 한다.
ex) UNIX, NT server
처리 방식
일괄 처리 (batch processing)
작업 요청을 일정량을 모아서 한꺼번에 처리하는 방식으로 최근에는 잘 사용하지 않는다.
ex) 초기 Punch Card 처리 시스템
시분할처리 (time sharing)
여러 작업을 수행할 때 CPU를 일정한 시간 단위로 분리해서 사용하는 방식이다.
일정 양이 모일때까지 대기하는 과정이 없기 때문에 일괄 처리 시스템보다 빠른 응답시간을 가진다.
또한 CPU에서 요청을 바로 수행해주기 때문에 interactive하게 사용 가능하다.
ex) UNIX
실시간처리 (Realtime OS)
정해진 시간 안에 특정 일이 반드시 종료되는게 보장되어야 하는 시스템을 위한 운영체제이다.
ex) 원자로/공장 제어, 미사일 제어와 같은 시스템에서 사용하는 운영체제
MultiProcessor의 개념
Multitasking, Multiprogramming, Time sharing, Multi process
- 위 단어들은 강조하는 부분은 다르지만 모두 컴퓨터에서 여러 작업을 동시에 수행하는 것을 의미한다.
Multi Processor
- 반면 Multi processor는 하나의 컴퓨터에 여러개의 CPU가 붙어 있는 것을 의미한다.
- CPU 가 여러개이면 속도는 더 빠르지만, 운영체제 입장에서는 더욱 복잡한 CPU 관리 시스템을 가지고 있어야 한다.
운영체제의 예
UNIX
서버를 위해서 만들어진 운영체제로 다중 사용자와 다중 작업을 관리하기 때문에 매우 복잡하다.
UNIX의 특징
- 기존에 사용하던 어셈블리어가 아닌 C언어로 작성하였기 때문에 개발자가 이해하기 편하다.
- 높은 이식성을 가지고 있고, 복잡한 시스템에 맞게 확장에 용이하다.
- 최소한의 커널 구조를 가지고 있어 가볍다.
- 오픈소스로 공개되어 있기 때문에 누구나 개발에 참여가능하고, 계속해서 발전하였다.
다양한 버전
- Linux, SunOS, Solaris, System V, FreeBSD
MS 윈도우
개인 사용자를 위한 단일 사용자 운영체제이다.
MS-DOS 에서 발전한 운영체제로 시스템에 새로운 하드웨어를 장착하면 운영체제가 자동으로 하드웨어를 감지하여서 그에 맞게 설정된다는 플러그 앤 플레이의 특징을 가지고 있다.
윈도우는 개인용 컴퓨터를 위한 운영체제로 누구나 손쉽게 사용할 수 있도록 편리한 각종 기능을 제공하는 반면, 유닉스는 오랜 전통을 지닌 운영체제로 안정성이 높아서 대형 컴퓨터 및 전문 목적의 컴퓨터에 사용하기 적합하다.
운영체제의 핵심 기능
CPU 스케줄링
매 시점 어떠한 프로세스에 CPU를 할당해 작업을 처리하는지 결정하는 기능
CPU는 명령을 수행하는 장치이기 때문에 어떤 프로세스에 CPU를 할당할지는 운영체제가 정해줘야한다.
따라서 CPU 스케줄링의 목적은 CPU를 효율적으로 사용하면서, 특정 프로세스가 불이익을 당하지 않도록 형평성을 고려하여 서비스를 할당하는 것이다.
CPU 사용 권한을 프로그램에 넘기면 운영체제도 권할을 뻈을 방법은 없기 때문에 다른 하드웨어와 협력하여 일정 시간만 사용 권한을 부여하는 작업을 수행한다.
대표적인 CPU 스케줄링 기법으로 선입선출, 라운드 로빈, 우선순위 기법이 있다.
선입 선출
선입 선출은 CPU의 효율성 측면에서는 문제가 없지만 전체 시스템의 입장에서는 손해가 있다.
시간이 오래 걸리는 프로세스가 먼저 큐에 들어오면 뒤에 들어오는 짧은 프로세스도 큐에서 대기해야하는 비효율성 문제가 발생한다.
이를 해결하기 위해서 라운드 로빈 방법이 고안되었다.
라운드 로빈
라운드 로빈에서는 일정시간만 CPU를 사용하고 사용이 끝나면 큐의 가장 뒤로 가서 다시 대기한다.
우선순위 스케줄링
CPU 사용을 위해 대기중인 프로세스들에 우선순위를 부여하고 우선순위가 높은 프로세스에게 먼저 CPU를 할당하는 방식이다.
우선순위가 낮아서 계속 자원을 사용할 수 없는 상황을 방지하기 위하여 오래 기다린 프로세스는 점차 우선순위를 높여주는 방안도 고려한다.
메모리 관리
한정된 메모리를 어떻게 효율적으로 나누어 쓸지를 관리하는 기능이다.
메모리를 관리하는 방식에는 고정분할 방식, 가변 분할 방식, 가상 메모리 방식이 있다.
1. 고정 분할 방식
물리적인 메모리를 일정한 크키의 단위로 나누고, 프로그램을 적재하는 방식이다.
고정 분할 방식의 단점
- 단위의 크기로 인해 최대 메모리에 올라가는 프로그램의 수가 제한된다.
- 나뉜 크기의 메모리보다 큰 프로그램은 올라갈 수 없어 외부조각이 발생한다.
- 단위의 크기보다 작은 프로그램이 올라가면 내부조각이 생겨 공간이 낭비된다.
가변 분할 방식
매 시점 프로그램의 크기에 맞게 메모리를 분할해서 사용하는 방식이다.
- 프로그램이 필요한 만큼만 메모리를 사용하기 떄문에 낭비가 발생하지는 않는다.
- 하지만 메모리에서 실행되는 프로그램의 개수와 메모리 영역의 크기가 동적으로 변하기 때문에 기술적인 관리 기법이 필요하여 복잡하다.
- 또한 물리적 메모리의 전체 크기보다 큰 프로그램은 올리지 못한다.
가상 메모리 기법
모든 프로그램이 독립적인 자신만의 가상 메모리 주소를 가지고 이를 물리적 메모리 주소와 매핑하여 사용하는 방식이다.
메모리보다 더 큰 프로그램을 실행할 수 있고, 외부조각이나 내부조강이 발생하지 않아 메모리 사용효율이 높기 때문에 현대의 범용 컴퓨터 환경에서 가장 널리 사용되는 기법이다.
어떻게 메모리 보다 큰 프로그램을 실행할 수 있을까?
메모리의 크기가 1GB이고 프로그램이 2GB 라고 할지라도, 2GB의 프로그램 전체가 항상 사용되는 것은 아니기 때문에 가상메모리 주소를 활용하여 일부만 메모리에 올려 사용하는게 가능하다.
나머지 부분은 보조기억장치의 스왑 영역에 저장하여, 필요하면 메모리로 가져와 실행한다.
이를 위해 프로그램을 구성하는 가상메모리 주소 공간을 페이지라는 동일한 크기의 작은 단위로 나뉘어서 물리적 메모리와 스왑 영역에 일부분씩 저장한다.
이렇게 나누는 기법을 페이징 기법이라고 한다.
디스크 스케줄링
한개의 I/O 장치에도 요청이 여러개 I/O 요청이 도착할 수 있다.
이때 요청을 어떤 순서대로 처리할지를 결정하는 디스크 스케줄링을 기능을 제공한다.
(단순히 들어온 순서대로 실행하면 오히려 자원 사용의 효율이 낮아질 수 있기 떄문에 이를 조절한다.)
인터럽트, 캐싱
빠른 CPU와 느린 I/O 장치간 속도 차이를 극복하기 위해서 인터럽트와 캐싱 기능을 제공한다.
인터럽트
CPU가 I/O 컨트롤러와 같은 느린 장치에 일을 시킨 후 다른 일을 하는 동안 장치가 명령을 모두 수행하면 완료 사실을 CPU에게 알리기 위한 방법이다.
주변 장치들은 각 장치마다 그 장치에서 발생하는 업무를 관리하기 위한 작은 CPU를 가지고 있는데 이를 컨트롤러라고 한다.
컨트롤러는 메모리에 접근할 수 없고, CPU도 장치에 직접 접근할 수 없기 때문에 컨트롤러가 장치의 일을 수행하고 결과를 내부 버퍼에 저장한 후 인터럽트를 통해서 일이 완료되었다고 CPU에게 보고해야한다.
인터럽트가 발생하는 과정은 아래와 같다.
- 인터럽트가 발생하면 CPU의 사용권한은 프로그램에서 운영체제로 넘어간다.
- 운영체제는 현재 CPU가 처리중이던 일을 저장하고, 인터럽트를 처리하도록 CPU를 동작 시킨다.
- 이후 인터럽트 처리 전의 일을 수행하도록 다시 프로그램에 CPU를 할당한다.
- 인터럽트도 요청하는 장치와 발생 상황에 따라 다양한 종류가 있다.
- 다양한 인터럽트의 종류에 따라서 수행해야하는 로직도 다른데 이를 인터럽트 처리 루틴 이라고 한다.
- 이러한 인터럽트 처리 루틴은 운영체제 커널 내에 존재하여 인터럽트가 발생하면 해당 부분을 찾아 실행하도록 한다.
파일 관리, 프로세스 관리
디스크에 파일을 어떻게 보관할지를 운영체제가 관리한다.
프로세스의 생성/삭제와 프로세스간 협력, 자원 할당 및 반환과 같은 전반적인 프로세스를 관리한다.
이번 장에서는 간략한 운영체제의 개념과 역할 및 기능에 대해서 공부하였다.
책을 통해서 운영체제의 다양한 전략에 대해서 공부하고, 이후에 리눅스와 같은 운영체제를 따로 학습하며 각 운영체제의 특징에는 어떤 것들이 있는지 추가로 공부할 계획이다.
'스터디' 카테고리의 다른 글
[스터디: 오브젝트] 다형성 (0) | 2024.03.07 |
---|---|
[OS 모의 면접 스터디] 컴퓨터 시스템의 동작원리 (4) | 2024.03.06 |
[스터디: 오브젝트] 합성과 믹스인 (0) | 2024.03.04 |
[스터디: 오브젝트] 상속과 코드 재사용 (0) | 2024.02.29 |
[스터디: 오브젝트] 유연한 설계 (1) | 2024.02.26 |