티스토리 뷰
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
- Ai
- SQL
- 프로그래머스
- 갓생
- 30분
- 루틴
- 아침
- 기초
- C언어
- 오픽
- 아침운동
- 운동
- 줄넘기
- 다이어트
- llm
- 실기
- 습관
- 영어회화
- 뉴스
- 스크랩
- Python
- 오블완
- 미라클모닝
- IH
- opic
- 경제
- 고득점 Kit
- 빅데이터 분석기사
- 티스토리챌린지
- ChatGPT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |