본문 바로가기

전체 글502

컴공기초 - 운영체제 개념 총정리(하) 1. 교착(Deadlock)과 기아(Starvation) 상태 - 교착과 기아상태는 스레드의 동기화 이슈를 해결하기 위해 작성하는 로직에서 발생하는 문제다. ▶ 교착(Deadlock) - 대기중인 두 스레드가 서로의 작업이 끝나기를 기다리는 상황(= 무한대기) ▶ 교착(dealock)의 발생조건 상호배제(Mutex) - 프로세스들이 필요로하는 자원에 대해 독점을 요구 점유대기(Hold & Wait) - 프로세스가 자원을 할당받은 상태에서 다른 자원을 기다림 비선점(Non-preemptive) - 다른프로세스가 사용중인 자원을 뺏을 수 없음 순환대기(Circular wait) - 각 프로세스가 다음 프로세스가 요구하는 자원을 가지고 있음 ▶ 교착의 해결방안 - 위의 4가지 발생조건 중 한가지를 제거한다. .. 2021. 7. 22.
컴공기초 - 운영체제 개념 총정리(상) 1. OS, 응용 프로그램, 시스템콜 ▶ OS란? - 시스템 자원 관리자 - 시스템 자원이란, 컴퓨터의 모든 하드웨어를 의미(CPU, Memory, 저장매체, 입력장치) ▶ OS가 필요한 이유 - 시스템 자원의 효율적 분배와 사용을 관리하기 위해 ▶ 응용 프로그램이란? - OS 위에서 돌아가는 모든 프로그램 (= SW, application) ▶ Shell 이란? - OS의 주요 기능 중 하나는 사용자에게 interface를 제공하는 것 - Shell이 사용자에게 interface를 제공하는 응용 프로그램이다. - Shell은 사용자가 필요로 하는 OS의 기능을 연결해주는 역할을 한다. - 예를 들어, 리눅스 CLI에서 명령어를 입력하는 등의 행위가 가능한 이유가 shell 덕분이다. ▶ API(Appl.. 2021. 7. 16.
39. 가상머신의 이해 - 가상 머신은 최근의 인공지능이나 클라우드 컴퓨팅에서 많이 사용되는 기술이다. - 가상 머신 기술을 운영체제 측면에서 보면, 소프트웨어를 이용하여 하드웨어를 여러개 구현하는 것이다. - 이와같은 이유로 OS 측면에서 가상머신을 위한 특별한 기술이나 깊이있는 접근을 필요로 하지 않는다. - 하지만, 가상머신 기술 자체는 대학원의 전공으로 지정될 만큼 깊이있는 기술이다. - 이번 포스팅에서는 가상머신에 대해 가볍게 알아보도록 하자 1. 가상머신이란? - 하나의 하드웨어(컴퓨터)에서 다수의 운영체제를 실행하도록 하여 개별 컴퓨터처럼 사용할 수 있도록 하는 것 - 이를 두고, 소프트웨어를 통해 하드웨어를 emulate(모방하다)한다고 말한다. 2. 가상머신 구현방식 a) Virtual Machine Type .. 2021. 7. 12.
38. 부팅의 이해 - 운영체제 부분에서 부팅 과정은 핵심적으로 다루는 주제가 아니다. - 그러므로 참고로 이해를 하면 좋을 것 같다. 1. 부팅이란? - Boot 프로그램을 이용하여 컴퓨터를 켜서 동작시키는 절차 ▶ Boot 프로그램: Storage에서 OS커널을 특정 주소의 물리 메모리에 복사하고 커널의 처음 실행위치를 PC로 설정하는 프로그램 2. 부팅과정 - 컴퓨터를 키면, BIOS가 특정 Storage를 읽어와 bootstrap loader를 메모리에 올리고 실행한다. - bootstrap loader 프로그램이 있는 곳을 찾아서 실행시킴 * ROM-BIOS 칩: 메모리로 구분되며, 컴퓨터의 전원이 꺼져도 데이터가 남아있다. a) 부팅과정의 이해 1. 컴퓨터가 켜지면, CPU는 무조건 ROM의 특정 주소(=FFFF.. 2021. 7. 12.
37. 파일 시스템 - inode 방식과 가상 파일시스템 1. inode 파일 시스템 - inode 방식의 파일 시스템은 다음 세가지의 블럭을 갖고 있다. ▶ 슈퍼 블록: 파일 시스템의 전체 정보를 가진 블록 ▶ 아이노드 블록: 각 파일의 상세 정보를 가진 블록 ▶ 데이터 블록(= 디스크 블록): 실제 데이터를 가진 블록 a) 슈퍼 블록 - 슈퍼블록은 파일 시스템의 전체적인 정보와 파티션 정보를 갖고 있다. - df라는 리눅스 명령어는 슈퍼블록의 정보를 받아오는 명령이다. - 해당 명령어를 이용하여 터미널에서 위의 사진과 같은 파일시스템의 전체적인 정보를 받아 올 수 있다. b) inode와 파일의 관계 - 각 파일은 inode의 번호를 할당 받는다. ▶ 프로세스가 생성되면 프로세스ID를 할당 받는 것 처럼, 파일도 생성과 함께 inode 번호를 할당 받는다... 2021. 7. 9.
36. 파일시스템 - 파일 시스템의 이해 1. 파일시스템이란? - 파일 시스템은 운영체제가 저장매체에 파일을 쓰기(write)위한 자료구조 또는 알고리즘을 의미한다. a) 파일 시스템이 만들어진 이유(블럭) - 0과 1로 이루어진 데이터를 어떻게 저장매체에 관리할까? ▶ 비트 단위로 주소를 매겨서 읽고 쓰고 등 관리하기에 오버헤드가 너무 크다 ▶ 그래서 블럭 단위로 관리하는 방법이 고안됨 (4kb 단위) ▶ 블럭마다 고유번호를 부여하여 읽고 쓰는 방식이 고안됨 -그러나 데이터가 점점 많아 질수록 일반 사용자가 블럭을 관리하는데 한계를 느낌 ▶ 그래서 블럭이 아닌, 사용자가 이해하기 쉬운 데이터의 집합(= 객체)이라는 개념이 생김 ▶ 데이터의 집합 = 객체 = 파일 이라는 개념이 등장 ▶ 사용자는 파일 단위로 데이터를 관리하고, 각 파일은 블럭 .. 2021. 7. 9.
35. 가상메모리 - 세그멘테이션 기법 1. Segmentation 기법 - 세그멘테이션 기법은 페이징 시스템과 비교되는 기법이다. - 페이징 기법과는 다르게 가상메모리를 서로 다른 크기의 논리 단위인 세그먼트(Segment)로 분할한다. ▶ 페이징 기법에서는 가상 메모리를 동일한 크기의 단위인 페이지(page)로 분할한다. a) 세그먼트의 가상주소 ▶ 가상주소 v = (s, d) ▶ s: 세그먼트 번호 ▶ d: 세그먼트 내부의 변위값 b) 세그먼트의 물리주소 계산방식 - 세그먼트 또한 page table과 같은 역할을 하는 세그먼트 테이블을 갖고 있다. - 물리주소를 계산하는 방식 또한 page와 동일한 방식을 사용한다. 2. 페이징 시스템 vs 세그멘테이션 기법 - 세그먼트는 페이지와 다르게 서로 다른 크기로 물리 메모리에 적재된다. 3... 2021. 7. 9.
34. 가상메모리 - 페이지 교체 알고리즘 1. 페이지 교체 정책(Page Replacement Policy) - 페이지 교체 정책은 한정적인 메모리를 효율적으로 사용하기 위한 기법 중 하나이다. - 쉽게 설명하자면, 메모리에 올려진 페이지 중 어떤 것을 내리고 어떤 새로운 페이지를 올릴지를 결정하는 규칙이다. - 일종의 swapping algorithm 이다. a) FIFO 페이지 교체 정책 - 가장 먼저 메모리에 올려진 페이지를 교체하는 방식 - 현실성과 효율성이 떨어져서 실제로 잘 사용되지는 않는다. b) OPT 최적 페이지 교체 정책(OPTimal Replacement Policy) - 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 방식 - 일반 OS에서는 구현 불가(예측이 불가능 하기 때문) c) LRU 페이지 교체 정책(Leas.. 2021. 7. 8.
33. 가상메모리 - 페이지 폴트 - 이번 포스팅은 페이징 시스템에 대한 더 깊은 이해를 다룰 예정이다. 1. 다양한 페이징 기법 - 페이징 시스템에서 가장 중요한 것은 프로세스의 데이터를 어느 시점에 어떤 데이터를 물리 메모리에 올리느냐는 것이다. - 여기에서 두가지 페이징 기법이 등장한다. a) 선행 페이징(Anticipatory Paging, Pre-paging) - 선행 페이징 기법은 프로세스의 모든 데이터를 미리 물리 메모리에 올려놓고 처리하는 것을 의미한다. - 사실상, 이 기법은 현실성이 많이 떨어지는 페이지 처리 방법이다. b) 요구 페이징(Demand Paging, Demanded Paging) - 요구 페이징 기법은 프로세스의 모든 데이터를 물리 메모리에 적재하지 않고, 필요한 시점에만 메모리에 적재한다. - 필요하지 .. 2021. 7. 8.
32. 가상메모리 - 다중 단계 페이징 시스템 1. 다중단계 페이징 시스템이란? - 페이지를 4kb 단위로 설정하면, 이를 보관하는 Page table의 범위도 그만큼 넓어지게 된다. - 리눅스를 예로 들어보자면, 4GB의 메모리 영역을 갖는 프로세스에서 0~3GB의 영역이 응용 프로그램이 갖는 영역이다. - 그러나 프로세스 당 실제 실행 코드의 크기는 커봤자 10kb 정도일 것이다. 그러면 나머지 약 3GB의 영역은 사용하지 않는 비효율적인 영역이 되는데, 이만큼의 메모리 영역이 page table에도 올라가게 된다. ▶ 4kb(= 32bit)의 페이지에서 하위 12bit는 오프셋(=변위)을, 상위 20bit는 페이지 번호를 담당한다. ▶ 상위 20bit는 2의 20승으로 총 1048576개의 페이지 정보를 필요로 한다. - 이러한 메모리의 누수를.. 2021. 7. 8.
31. 가상메모리 - 페이징 시스템 - 이번 포스팅에서는 가상 메모리 시스템을 만들 때 가장 많이 사용되는 페이징 시스템에 대해서 알아보자. 1. 페이징 시스템의 이해 a) 페이징 시스템이란? - 고정된 크기의 단위인 페이지를 기준으로 가상 주소 공간과 이에 해당하는 물리 주소 공간을 관리하는 것. - 하드웨어의 지원을 필요로 한다. ex) Intel x86(32bit)의 경우, 페이징 처리 단위를 4KB, 2MB, 1GB로 지원 ex) 리눅스의 경우, 4KB 페이징 처리 단위를 지원 ex) 4KB단위로 페이징 처리를 한다는 것은 프로세스의 주소 영역(4GB)을 4KB단위로 나누는 것 - 페이지 번호를 기반으로 가상/물리 주소 매핑 정보를 기록 및 사용 b) 페이징 시스템의 작동방식 예제 - 프로세스(4GB)의 PCB(Process Con.. 2021. 7. 6.
30. 가상메모리(Virtual Memory System) - 개념 1. 개요 - 이전 포스팅까지 프로세스와 스레드에 대해 알아보면서 가상메모리를 언급한 바 있다. - 해당 내용은 다음과 같다. ▶ 리눅스의 경우, 프로세스 하나 당 4GB의 크기를 갖는다. ▶ 그렇다면 컴퓨터 메모리가 8GB인 경우, 한번에 두개의 프로세스밖에 처리하지 못한다는 것을 의미한다. ▶ 하지만, 실제로 컴퓨터를 사용해보면 여러가지 프로세스를 8GB 메모리로 충분히 처리할 수 있다. ▶ 이 부분이 가능한 이유는 가상 메모리와 가상메모리를 활용하는 다양한 스케줄링 기법 때문이다. https://devraphy.tistory.com/171?category=988503 18. 프로세스 - IPC의 개념 1. IPC(Inter-Process Communication) 배경지식 - 운영체제에서 프로세스 .. 2021. 7. 6.