# 운영체제와 컴퓨터
## 운영체제의 역할과 구조
운영체제는 컴퓨터 시스템을 관리하고 제어하는 소프트웨어입니다. 이것은 사용자와 하드웨어 사이의 중개자 역할을 하며, 여러 작업을 효율적으로 실행하도록 도와줍니다. 주요 역할은 프로그램 실행, 파일 관리, 하드웨어 자원 할당, 사용자 인터페이스 제공 등이 있습니다. 운영체제의 구조는 커널(kernel)과 셸(shell)로 나뉘며, 커널은 핵심 기능을 수행하고 셸은 사용자와 상호작용하는 인터페이스 역할을 합니다.
1. **커널 (Kernel):**
- **핵심 역할:** 커널은 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 인터페이스 역할을 합니다.
- **자원 관리:** 커널은 시스템의 자원을 효율적으로 관리하며, 이는 CPU, 메모리, 입출력 장치 등을 포함합니다.
- **프로세스 관리:** 프로세스의 생성, 스케줄링, 종료 등을 관리합니다. 프로세스는 실행 중인 프로그램을 나타냅니다.
- **메모리 관리:** 시스템의 메모리를 할당하고 해제하며, 가상 메모리와 물리 메모리 간의 매핑을 담당합니다.
- **입출력 관리:** 입출력 장치들과의 효율적인 통신을 담당하여 데이터 전송이나 파일 입출력과 관련된 작업을 수행합니다.
2. **셸 (Shell):**
- **사용자 인터페이스:** 셸은 사용자와 운영체제 간의 인터페이스를 제공합니다. 사용자는 주로 명령어를 셸을 통해 입력하고, 셸은 이를 해석하여 커널에 명령을 전달합니다.
- **명령 해석:** 셸은 사용자가 입력한 명령어를 해석하고, 이를 커널이 이해할 수 있는 형태로 변환합니다.
- **파일 및 프로그램 관리:** 파일 및 디렉토리를 생성, 삭제, 수정하는 등의 파일 시스템 관리 작업을 수행하며, 사용자가 실행하려는 프로그램을 찾아 실행합니다.
- **배치 처리 및 스크립팅:** 여러 명령어를 하나의 스크립트로 작성하여 실행하거나, 배치 처리를 통해 일괄적으로 작업을 수행하는 기능을 제공합니다.
커널과 셸은 서로 협력하여 시스템을 운영하며, 사용자와 하드웨어 간의 효율적인 소통을 도와줍니다. 사용자는 주로 셸을 통해 운영체제와 상호작용하며, 셸은 이러한 사용자의 명령을 해석하여 커널에 전달하여 실제로 시스템을 제어합니다.
### 용어
1. I/O 요청 : 입출력 함수, 데이터베이스, 네트워크, 파일 접근 등에 관한 일
2. 드라이버 : 하드웨어를 제어하기 위한 소프트 웨어
3. GUI : 사용자가 전자장치와 상호 작용할 수 있도록 하는 사용자 인터페이스의 한 형태, 단순 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 컴퓨터와 상호 작용을 도움.
4. CUI : 그래픽이 아닌 명령어로 처리하는 인터페이스
5. 시스템콜 : 운영체제가 커널에 접근하기 위한 인터페이스. 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 사용.
6. modebit : 시스템콜이 작동될 때 modebit을 참고해서 유저 모드와 커널 모드를 구분. modebit은 1 또는 0의 값을 가지는 플래스 변수. modebit의 0은 커널 모드. 1은 유저 모드. 유저 모드일 경우에는 시스템콜을 못하게 막아서 한정된 일만 가능.
7. 유저모드 : 유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드
8. 커널모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드
9. 커널 : 운영체제의 핵심 부분. 시스템콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O디바이스, I/O 요청 관리 등 운영 체제의 핵심 역할
## 컴퓨터의 요소
컴퓨터 시스템은 주로 하드웨어와 소프트웨어로 구성됩니다.
하드웨어는 중앙 처리 장치(CPU), 메모리, 저장 장치, 입력 장치, 출력 장치로 이루어져 있으며,
소프트웨어는 운영체제와 응용 프로그램으로 구성됩니다. CPU는 명령어를 실행하고, 메모리는 데이터와 명령어를 저장하며, 저장 장치는 데이터를 장기적으로 저장합니다.
입력 장치는 정보를 시스템으로 입력하고, 출력 장치는 시스템의 결과를 표시합니다.
# CPU
## CPU 연산처리 과정
아주 멀지 않은 곳에 컴퓨터 도시라는 곳이 있었습니다. 이 도시의 세 히어로, 제어장치 씨, 레지스터 양, 그리고 산술논리연산장치 님은 함께 도시를 지키며 살고 있었습니다.
제어장치 씨는 도시의 교통경찰처럼 일을 합니다. 그는 어떤 정보들이 어디로 가야 하는지, 언제 가야 하는지를 결정하며, 모든 정보의 흐름을 제어합니다. 그의 지시가 없으면, 정보들은 어디로 가야 할지를 모르고 방황하게 됩니다.
레지스터 양은 도시의 창고관리자입니다. 그는 들어오는 정보들을 임시로 보관하고, 필요한 정보를 빠르게 찾아 제공합니다. 그의 창고가 없다면, 정보들은 잃어버리거나 필요한 때에 찾지 못할 수도 있습니다. 마지막으로, 산술논리연산장치 님은 도시의 천재 과학자입니다. 그는 들어온 정보를 분석하여 새로운 정보를 만들어냅니다. 더하기, 빼기, 곱하기, 나누기와 같은 산술 연산뿐 아니라, 비교, AND, OR, NOT과 같은 논리 연산도 가능합니다.
어느 날, 컴퓨터 도시에 큰 문제가 생겼습니다. 도시에 들어온 정보들이 너무 많아져서 처리하는 데 어려움을 겪게 되었습니다. 그런데도 우리 히어로들은 당황하지 않았습니다.
제어장치 씨는 먼저 어떤 정보가 우선적으로 처리되어야 하는지를 판단했습니다. 그리고 레지스터 양에게 그 정보를 잠시 보관하라고 지시했습니다. 레지스터 양은 그 정보를 잘 보관하고 있었습니다.
그 다음, 제어장치 씨는 산술논리연산장치 님에게 그 정보를 가지고 필요한 연산을 수행하라고 지시했습니다. 산술논리연산장치 님은 그 정보를 가지고 빠르게 연산을 수행하여 새로운 정보를 만들어냈습니다.
이렇게, 우리의 세 히어로들은 함께 작업하여 큰 문제를 해결하였습니다. 그들은 각자의 역할을 충실히 수행하여 컴퓨터 도시를 안전하게 지키고, 정보들이 원활하게 흐를 수 있도록 하였습니다.
# 메모리
## 메모리 계층
컴퓨터 메모리는 계층 구조로 이루어져 있으며, 주로 레지스터, 캐시, 주 기억장치, 보조기억장치로 나뉩니다. 레지스터는 CPU 내부에 위치하며 가장 빠른 메모리이고, 캐시는 CPU에 가까운 위치에서 빠른 데이터 접근을 위한 용도로 사용됩니다. 주 기억장치는 RAM(Random Access Memory)로 프로그램과 데이터를 저장하며, 보조기억장치는 하드 디스크, SSD 등으로 장기적인 데이터 저장을 담당합니다.
인간의 기억 체계 : 감각기억 > 단기기억 > 장기기억
메모리 체계 : 레지스터 > 캐시 > 메모리 > 저장장치
'레지스터'는 컴퓨터에서 가장 빠르게 접근 가능한 저장 공간으로, 이는 '직접적인 인식'에 가깝습니다. 우리의 뇌에서 특정 사항을 직접적으로 인식하는 것처럼, CPU는 레지스터를 통해 직접 데이터를 읽고 쓸 수 있습니다.
'감각 기억'은 매우 짧은 시간 동안 정보를 보관하는 공간으로, 이를 컴퓨터에 비유하면 '캐시'에 해당합니다. 캐시는 CPU가 빠르게 접근할 수 있는 공간으로, 자주 사용되는 데이터나 최근에 사용된 데이터를 임시로 저장합니다.
'단기 기억'은 약간 더 긴 시간 동안 정보를 보관하며, 이는 컴퓨터에서 '메모리(RAM)'에 해당합니다. 메모리는 현재 실행 중인 프로그램이나 데이터를 저장하는 공간으로, CPU가 직접 접근할 수 있습니다.
'장기 기억'은 우리가 오랜 시간 동안 기억할 수 있는 정보를 저장하는 공간으로, 이는 컴퓨터의 '저장장치(HDD, SSD)'에 해당합니다. 저장장치는 컴퓨터가 꺼진 후에도 정보를 보관할 수 있으며, 큰 용량의 데이터를 저장할 수 있습니다.
## 메모리 관리
메모리 관리는 운영체제가 주 기억장치의 자원을 효율적으로 할당하고 관리하는 과정을 의미합니다. 이는 프로세스 간의 충돌을 방지하고 시스템 성능을 최적화하는데 중요합니다. 메모리 관리 기법에는 단일 연속 할당, 분할 할당, 페이징, 세그멘테이션 등이 포함됩니다.
# 프로세스와 스레드
## 프로세스와 컴파일 과정
프로세스는 실행 중인 프로그램의 인스턴스를 나타냅니다. 프로그램은 소스 코드에서 컴파일되어 실행 파일로 변환되고, 이 실행 파일이 메모리에 로드되면 프로세스가 시작됩니다. 프로세스는 독립적으로 실행되며, 각각의 프로세스는 자체의 메모리 공간을 가집니다.
## 프로세스의 상태
프로세스는 여러 상태를 가질 수 있으며, 주요 상태에는 실행 상태, 대기 상태, 준비 상태, 종료 상태가 있습니다. 실행 상태에서는 CPU에서 명령어를 실행하고, 대기 상태에서는 어떤 이벤트를 기다리며, 준비 상태에서는 CPU를 할당받을 수 있는 상태입니다.
## 프로세스의 메모리 구조
프로세스의 메모리 구조는 주로 코드(Code), 데이터(Data), 스택(Stack), 힙(Heap) 영역으로 나뉩니다. 코드 영역에는 프로그램의 명령어가 저장되고, 데이터 영역에는 전역 변수와 정적 변수가 저장됩니다. 스택 영역은 함수 호출과 지역 변수 저장에 사용되며, 힙 영역은 동적으로 할당된 메모리를 저장합니다.
## PCB (Process Control Block)
PCB는 각 프로세스에 대한 정보를 저장하는 자료구조로, 프로세스의 상태, 레지스터 상태, 프로그램 카운터 등의 정보를 포함합니다. 운영체제는 PCB를 사용하여 프로세스 간의 전환 및 관리를 수행합니다.
## 멀티프로세싱
멀티프로세싱은 여러 프로세스가 동시에 실행되는 기술을 말하며, 이는 시스템의 성능을 향상시키고 여러 작업을 병렬로 처리할 수 있게 합니다.
## 스레드와 멀티스레딩
스레드는 프로세스 내에서 독립적으로 실행될 수 있는 실행 단위입니다. 멀티스레딩은 하나의 프로세스가 여러 스레드로 구성되는 것을 의미하며, 스레드 간에는 메모리 공유가 가능하므로 효율적인 작업 분배가 가능합니다.
## 공유 자원과 임계 영역
여러 스레드가 공유 자원(예: 메모리, 파일)에 동시에 접근할 때 충돌을 방지하기 위해
임계 영역을 설정해야 합니다. 임계 영역은 한 번에 하나의 스레드만 접근할 수 있는 영역으로 보호됩니다.
## 교착상태
교착상태는 둘 이상의 프로세스나 스레드가 서로를 기다리며 더 이상 진행하지 못하는 상태를 의미합니다. 이를 해결하기 위해 교착상태 검출과 해결 알고리즘을 사용합니다.
# CPU 스케쥴링 알고리즘
## 비선형 방식
비선형 스케쥴링 알고리즘은 프로세스의 우선순위에 따라 CPU를 할당하는 방식입니다. 이러한 알고리즘은 우선순위가 높은 프로세스에 CPU 시간을 더 많이 할당하여 중요한 작업을 먼저 처리합니다.
## 선점형 방식
선점형 스케쥴링 알고리즘은 현재 실행 중인 프로세스를 중단하고 다른 프로세스에게 CPU를 할당할 수 있는 방식입니다. 이를 통해 우선순위가 높은 프로세스가 빠르게 실행되며 응답 시간을 최소화할 수 있습니다.