티스토리 뷰

AI/CS

[CS] 운영체제

brave_sol 2025. 3. 23. 18:09

1. 컴퓨터 하드웨어 

1) CPU(Central Processing Unit): 중앙처리장치, 

- 데이터와 명령어를 처리하는 제어 장치

- 컴퓨터가 사용하는 정보는 주 기억 장치인 메모리에 위치

 

2) 메모리

- CPU가 처리할 데이터와 명령어를 저장하는 장치

- 메모리에는 주소가 부여되어 있고, 주소를 참조하여 데이터를 찾음

- 보조기억 장치에 비해서 속도가 빠르지만, 차단되면 내용이 삭제됨\

 

3) 주변장치

- 입력장치(마우스, 키보드 등), 출력장치(모니터, 스피커, 프린터 등), 보조기억장치(SSD, HDD 등)

 

2. 운영체제란?

- 하드웨어를 포함한 리소스를 제어하고, 프로그램을 실행해주는 시스템 소프트웨어

* 리소스(자원): 시스템의 작업 수행을 위해 필요한 모든 하드웨어 및 소프트웨어(메모리 등)

 

3. 운영체제의 기능

1) 프로세스 관리

* 프로세스란? 실행 중인 프로그램

** 프로그램이란? 특정 작업을 수행하는 명령어들의 모음

*** 스레드란? 프로세스 안에서 실행되는 흐름 단위(프로세스에는 하나 이상의 스레드가 존재)

- 프로세스는 독립적인 메모리를 할당 받고, 스레드는 프로세스 속에 있어, 프로세스가 받은 메모리를 공유한다.

- 리소스 관리: 프로세스에 필요한 리소스 할당, 응용 프로그램은 다른 응용프로그램의 리소스를 강제로 사용할 수 없다.
- 각 프로세스의 상태를 관리해 종료된 프로그램에서 리소스를 해제
- 멀티 프로세싱: 동시에 여러 프로세스 실행)

* 멀티스레드: 한 프로세스 내에서 자원을 공유하면서 여러 작업을 처리, 새로 프로세스를 생성하고 리소스를 할당 받는 과정이 없어 빠르지만, 하나의 스레드가 문제가 생기면 프로세스 전체가 종료될 수 있다.

 

2) 메모리 관리

- 메모리관리: CPU 에서 실행될 수 있도록 메모리에 정보를 올리거나 내림

- 가상메모리: 실제 메모리가 적더라도 프로세스를 실행할 수 있도록 도와줌=> 정보 보호, 연속 주소 제공

=> 프로세스가 주소 값 관리에 대해 거의 고민하지 않아도 된다

 

3) 파일시스템 관리

- 저장 장치에서 파일을 읽고 쓰는 방법

 

4) 네트워크 관리

- 프로토콜(네트워크 상의 컴퓨터끼리 통신하는 규칙)을 지원하여 프로그램이 네트워크를 사용할 수 있도록 함

- 이미 사용중인 포트는 사용할 수 없도록 제어

 

3. 컨테이너화

- 실행에 필요한 모든 환경과 패키지를 포함해 하나로 묶어 운영체제와 상관없이 동일한 개발환경을 구성할 수 있음

 

4. 프로세스의 구조

구분 설명
스택 임시데이터 (함수 호출, 로컬 변수 등), 프로세스별로 크기가 제한
함수의 호출과 함께 할당되고, 호출이 완료되면 소멸
데이터를 저장하는 선형 자료구조, 후입선출(LIFO) push, pop
동적(실행 중에 변함)으로 생성되는 데이터 저장
사용자가 직접 관리할 수 있고, 관리를 잘못할 경우 메모리 누수가 발생
* 메모리누수: 동적 할당된 메모리를 해제하지 않은채로 사용하지 않은 상태로 남겨둠
데이터 (실행 중 크기 고정) 전역변수, 정적(실행 중에 변하지 않음)변수, 배열, 구조체 등이 저장
* 프로그램이 시작되는 시점~종료시점까지 추가되거나 사라지지 않고, 프로그램이 종료되면 소멸
코드 (실행 중 크기 고정) CPU에서 실행할 명령어를 저장, 컴파일된 코드가 들어가는 영역
*컴파일: 기계어로 변환

- 정적 할당: 실행 전에 미리 메모리를 할당, 할당 받을 메모리 크기가 미리 정해져 있음

- 동적 할당: 실행 도중에 메모리를 할당, 할당 받을 크기가 변할 수 있음

 

5. 프로세스 상태 전이

생성 → 준비 → 실행 → 종료
         ↑↓ 대기

1) 생성(new/create) : 준비상태로의 승인 대기, 아직 메모리에 로드되지 X, 리소스가 부족하면 이 상태에서 오래 대기할 수 있음

2) 준비(ready): 프로세스가 CPU를 사용하고 있지 않지만, 언제든 실행될 수 있도록 대기, 우선순위가 높은 순서대로 CPU를 할당해서 실행(Running) 상태로 전이

3) 실행(Running) : CPU가 할당되어 프로세스의 명령어들을 처리해주는 단계, 동시에 다른 프로세스들을 처리하기 위해 일정 시간 이후 다시 Ready상태로 전이

4) 대기(Blocking, waiting) : 프로세스가 특정 자원이나 이벤트를 기다리는 상태, 이벤트가 완료되면 Ready 상태로 옮겨와 계속해 실행 => 프로세스가 입출력이 완료된 시점에 이미 CPU를 할당받고 실행중인 프로세스가 있을 수 있기 때문

5) 종료(Terminated): 모든 명령어가 완료된 상태, 부모 프로세스가 상태를 확인하기 위해 바로 삭제되지 않고 해당 상태에서 대기, 이 상태가 끝나면 프로세스가 메모리에서 삭제됨

 

6. 프로세스간 통신(IPC)

- 다른 프로세스의 리소스는 절대 침범하면 안됨, 운영체제가 허용하는 방법 내에서 데이터를 주고 받는 방법들

 

1) 메시지큐: 데이터를 메시지큐에 넣어두면 다른 프로세스가 데이터를 찾아서 다룰 수 있다. 

2) 공유메모리: 프로세스의 메모리 일부를 공유 메모리로 만들어 다른 프로세스와 공유(데이터를 복사하는 과정이 생략되어 빠르게 동작하지만, 리소스를 공유해 충돌 위험이 있다)
3) 소켓: 소켓을 생성해 다른 네트워크에 있는 프로세스와도 통신 할 수 있음, 양방향 통신을 통해 데이터를 전달, 통신 규약에 따라 통신

 

7. 프로세스 스케줄링

- 대기 시간은 가능한 최소화

- 가능한 공평하게 프로세스를 처리

1) 선입선처리: 가장 먼저 도착한 프로세스부터 순서대로 처리

2) 최단 작업 우선: 오래 걸리는 작업은 매번 양보해 처리가 안될 수 있음

3) 라운드로빈 : 모두에게 일정 시간만큼만 처리, 응답 시간이 짧아 실시간 시스템에 유리하나, 프로세스 간의 전환이 많다는 단점이 있다

 

8. 교착상태

- 프로세스가 서로 작업이 끝나기만을 기다리고 아무것도 완료되지 않는 상황

- 여러 프로세스가 서로 원하는 자원을 점유하고 있어 실행이 멈추는 상태

- 아래 4가지 중 하나라도 막는다면 교착상태 예방 가능

1) 상호배제 : 자원을 동시에 둘 이상 사용할 수 없음

2) 점유대기 : 자원을 이미 가진 상태에서 다른 자원을 사용하려고 기다림

3) 비선점: 다른 프로세스가 자원을 뺏어올 방법이 없음

4) 순환대기 : 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음

 

- 교착상태 해결을 위해 은행원 알고리즘, 교착상태 무시, 프로세스 종료 등의 방법이 있지만 완벽하진 않음

1) 은행원 알고리즘: 자원을 할당 받기 전에 운영체제가 검사하고 할당

2) 교착상태 무시: 아무것도 하지 않음

3) 프로세스 종료: 교착상태가 발견되면 관련 프로세스를 종료시켜서 해결

 

9. 기아상태

- 프로세스의 우선 순위가 낮아 원하는 자원을 계속 받지 못하는 상태

=> 모든 프로세스가 처리될 수 있도록 순서를 정하는 것이 중요

1) 우선순위를 수시로 변경해 낮은 우선순위를 가진 프로세스가 고정되지 않도록 함

2) 오래 기다린 프로세스를 우선순위를 높이는 방법

3) 순서대로 처리

 

10. 메모리 관리

- 프로그램들이 잘 실행될 수 있도록 메모리를 할당하고, 해제하는 작업

- 각 프로그램의 리소스를 보호하고, 여러 프로세스가 동시에 실행될 수 있도록 메모리 공간을 제공

 

1) 고정 분할 방식

- 미리 고정된 길이로 메모리를 나누고 할당하는 방식

- 제공한 메모리가 남으면 내부 단편화

- 메모리가 부족해 할당을 못해주면 외부 단편화

 

2) 가변분할방식

- 필요한 만큼 할당해줘 내부 단편화가 없지만, 연속된 길이로만 줄 수 있어 외부 단편화가 여전히 발생

 

3) 가상메모리

- 가상의 주소인 논리적 주소를 프로세스가 사용해 모든 프로세스가 고정된 주소를 가질 수 있도록 한다

- 물리적인 메모리가 부족하더라도 프로세스를 실행할 수 있다

- 실제 물리적 주소는 운영체제만 접근할 수 있어 리소스를 보호하고, 보조 기억 장치 일부를 메모리처럼 사용할 수 있음

- 가상 메모리의 페이지이와 물리 메모리를 매핑하는 페이지 테이블을 가진다

 

4) 페이지

- 물리적 메모리와 가상 주소를 연결하는 단위, 일반적으로 4KB 또는 8KB 크기를 가진다.

- 메모리는 이 페이지 단위로 나누고 사용한다

 

5) 스와핑

- 주 기억 장치의 프로세스(안쓰는 프로세스)를 잠시 보조 기억 장치(하드디스크)에 적재 했다가 필요시 다시 불러오는 기법

- 하지만 프로세스 단위로 하드 디스크와 메모리를 전환하는 것은 비효율적이고 단편화가 발생할 수 있어 최근에는 사용하지 않는다.

 

6) 요구 페이징

- 프로세스 단위가 아닌, 페이지 단위로 스와핑하여 프로세스의 실행 시점에 필요한 페이지만 메모리에 적재하는 방법

- 일정한 크기로 자르기 때문에 내부 단편화가 발생

- 페이지 테이블에서 물리 메모리에 없으면 하드디스크에서 불러와 읽음

 

7) 캐시

- 데이터나 값을 미리 복사해 놓는 임시 장소, 계산이 오래 걸리는 데이터를 자주 봐야하는 경우 등에 사용한다.

 

8) 세그멘테이션

- 논리적으로 같은 역할을 하는 부분끼리 잘라, 중요한 부분과 아닌 부분을 분리하여 저장

- 같은 코드 영역은 하나만 저장하고, 같은 곳을 가리키도록 하여 중복된 내용을 없애고 내부 단편화를 해결 할 수 있다. 

- 하지만 길이가 다르게 자르기 때문에 여전히 외부 단편화가 발생할 수 있고, 일반적으로 외부 단편화가 내부 단편화보다 더 큰 공간이 낭비된다.

 

=> 페이징+세그멘테이션

- 부위 별로 먼저 나눈 다음 각 부위를 일정 크기대로 잘라 외부 단편화를 방지할 수 있으나, 테이블을 두번 거쳐 느릴 수 있다.

 

11. 파일시스템

- 파일: 컴퓨터에서 정보를 담는 논리적인 저장 단위

- 파일 메타데이터: 파일을 관리하기 위한 정보들(이름, 유형, 위치, 크기, 권한, 생성 시간 등)

- 디렉토리(폴더): 파일에 대한 여러 정보를 가지고 있는 특수한 파일(이름,속성,검색,생성,삭제 기능)

- 파일시스템: 파일들을 쉽게 접근할 수 있도록 관리하는 체제(디스크, 네트워크, 특수 용도 파일)

 

12. 디스크 할당

1) 순차 접근 저장 장치: 카세트 테이프 등 앞에서부터 순서대로 읽어야 하는 저장 장치

2) 직접 접근 저장 장치: LP판과 같이 헤드를 옮겨 원하는 부분부터 접근이 가능

- 하드디스크도 헤드와 플래터로 나뉘어, 플래터가 회전하고 헤드가 정보를 읽어오는 방식이다

 

13. 하드디스크

- 트랙: 플래터에서 띠 모양의 영역

- 섹터: 하드 드라이브의 최소 기억 단위

 

14. SSD

- 하드디스크와 다르게 물리적인 기계 장치 없이 전기 장치로만 구성되어 있어 훨씬 빠르다

 

15. 파일 할당

- 하드디스크: 블록이라는 단위로 나누어 번호를 붙인다.

1) 연속 할당: 앞에서부터 차례대로 데이터를 입력, 헤드의 이동을 최소화해 입출력 속도가 빠르다

- 할당과 삭제를 반복할 경우, 중간에 구멍이 생겨 외부 단편화가 발생

 

2) 연결리스트
- 데이터와 다음을 가리키는 포인터(화살표)로 구성되어 한 줄로 연결된 자료구조

- 길이가 계속 변화하는 데이터에 적합한 자료 구조, 데이터를 읽고 포인터를 보고 다음 노드로 이동하는 작업을 반복해 데이터를 읽는다

 

3) 연결 할당

- 연결리스트와 같은 방식으로 파일을 할당, 데이터와 주소를 저장하는 공간으로 나눠서 사용한다.

- 외부 단편화 문제가 없지만, 헤드가 여러번 움직여야 하고, 직접 접근이 불가능하며(한 파일은 무조건 처음부터 접근해야 함), 한 칸이 손상되면 나머지 모든 데이터를 읽을 수 없다

 

4) FAT방식

- 화살표들을 모아서 하나의 표(FAT이라는 테이블)로 저장, FAT만 읽어 원하는 칸부터 직접 접근 가능

- 하지만 칸 번호의 자릿수를 늘리면 표가 커질수록 검색하는 시간이 증가하고, 칸의 크기를 늘리면 작은 파일도 큰 칸에 저장해 단편화가 발생한다.

 

5) 색인 할당

- 번호들을 순서대로 한 칸에 기록(인덱스 블록)

- 인덱스 블록을 읽으면 직접 접근이 가능해 외부 단편화 문제가 발생하지 않지만, 이 표를 저장하기 위해 파일마다 한 칸을 사용해야해 큰 파일은 저장할 수 없다)

- 리눅스의 inode랑 비슷(파일에 대한 모든 정보가 기록)

- 바로가기

 

16. 링크(리눅스의 바로가기 기능)

 

1) 심볼릭 링크

- 심볼릭 링크 > 링크의 inode > 원본파일 > 원본의 inode > 하드디스크

- 원본 파일이 삭제되거나 경로가 변하면 링크가 끊어진다. 링크 파일을 수정하면 원본 파일의 내용이 동일하게 수정된다. 링크 파일도 별도의 inode를 가진다. inode파일의 내용은 원본 파일의 경로를 가리킨다.

*inode: 파일 시스템 내에서 파일을 고유하게 식별하는 번호

- 대량의 데이터를 복사하는 대신 링크를 사용하면 여러 위치에 같은 데이터가 저장된 것처럼 사용할 수 있지만, 하드 디스크의 용량은 한 번만 차지하고 있다.

 

2) 하드링크 

- 동일한 inode를 가짐, 원본 파일을 이동하거나 삭제해도 하드 링크 파일은 그대로 사용할 수 있다. 

- 링크 파일을 수정하면 원본 파일도 수정된다. 링크가 원본 파일의 inode를 공유한다.

 

17. 마운트

- 물리적인 장치를 특정 디렉토리에 연결하는 것(파일 시스템을 운영체제에 연결하는 과정)

- 새로운 물리 장치를 사용하기 위해서는 반드시 마운트를 해야 한다. 일부 운영체제에서는 자동으로 마운트를 실행한다.

1) 윈도우 → 자동으로 마운트 해줌(하드디스크:C, usb:D, cd:E, dvd:E, 플로피디스크:A 등)

2) 리눅스 : /root - /bin /dev /sbin /etc /usr /data1: 마운트 포인트

*마운트포인트: 저장 장치에 연결된 디렉토리

sudo mount [옵션] [장치] [디렉토리]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'AI > CS' 카테고리의 다른 글

[CS] 알고리즘- 그래프, DFS, BFS  (0) 2025.03.25
[CS] 알고리즘 - 구현  (0) 2025.03.25
[CS] 네트워크  (0) 2025.03.18
[CS] 리눅스  (0) 2025.03.18
[CS] 컴퓨터개론  (0) 2025.03.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함