분류 전체보기 68

[OS] Virtual Memory

0. 배경 paging이나 segmentation을 살펴보면, 프로세스가 여러 조각으로 나누어 지고 이러한 조각들이 연속적으로 메모리 상에 존재할 필요가 없어졌다. 뿐만 아니라 논리 주소를 물리 주소로 변경하는 걸 보자니, 어떤 프로세스가 종료되었다가 다시 올라왔을 때 같은 위치에 넣지 않아도 된다. 이러한 특성을 반영하여 프로세스가 실행되고 종료되는 동안 꼭 모든 영역을 메모리 상에 올리지 않아도 된다. 즉, 실행 될 부분만 메모리 상에 올리면 된다는 개념이 시작되었다. 여기서 부분 적재 개념이 생겨나면서 virtual memory(VM) 개념이 생겨났다. 1. locality 아니, 코드 중 일부만 메모리에 올린다고? 이게 정상적으로, 효율적으로 돌아 갈 수 있는거야? 이에 답은 YES 이다. 그러한..

[OS] Memory management

0. 기본 개념 프로세스가 돌아가기 위해서는 cpu와 메모리가 필요하다. 프로세스가 돌아가기 위해 필요한 메모리를 할당하는 방식은 크게 두가지가 있다. 정적할당 - 실행 이전에 전역변수, static 변수를 메모리에 올린다. 동적할당 - 실행 시점에 동적으로 필요한 만큼만 할당한다. 또한 메인 메모리는 크게 두 가지 영역으로 나뉜다. kernel 영역과 user 영역. 뿐만 아니라 multi programing이 생겨남에 따라 user 영역에 한번에 여러 어플리케이션이 올라가기도 한다. 그에 따라 서로 서로 침범하지 않게 잘 나누어야 한다. 1. 메모리 관리의 역할 메모리 관리라는 것은 어떠한 것들을 제공해 주는 것일까? 하나씩 살펴보자 - Relocation: 많은 프로세스는 하나의 메인 메모리에 다함..

[OS] DeadLocks

0. 정의 프로세스의 집합이 영원히 block 되어 있는 상태를 의미한다. 그렇게 되는 이유는 해당 집합 내에서 누군가가 어떠한 event를 발생 시켜야만 다른 프로세스가 움직일 수 있지만 서로 그 상태에 머물러 있기 때문이다. 이때의 event라는 것은 자원을 할당 받는 다는 것이다. 아래 그림을 보면 직진할 수 있는 길을 할당 받기 위해 서로 기다리면서 길을 막고 있는 것처럼. 1. 자원 할당 그래프 오른쪽 그림과 같이 자원은 R, 프로세서는 P로 나타낸다. 각 P1과 P2 모두 R1, R2를 둘 다 요청하고 있다. 이때 R1은 P1에게 할당 되었고 R2는 P2에게 할당 되었다. 하지만 P1은 R2가 필요하고 P2도 R1이 필요하다. 이렇게 되면 P1,P2 둘다 자원을 할당 받기를 기다리게 되고 이것..

[OS] 동기화

0. 동기화의 필요성 사용하기 쉽고 편한 스레드의 등장 대신 그 만큼의 책임이 생겼다. stack 영역을 제외한 메모리 영역은 공유를 하기 때문에 조심해야 한다. 예를 들어 어떤 스레드는 값을 5를 넣고 어떤 연산 이후 그 값에 10을 더하는 연산을 해야하는 와중에 context switch가 발생하여 다른 스레드가 3으로 바꿔 버리면 원래 스레드가 그 값을 읽고 10을 더하면 13을 도출하게 된다. 이러한 문제를 race condition(동시성 문제)이라 고 한다. 다시말해 같은 실행과정을 거쳐도 리턴 값이 일정하지 않고 예측할 수 없다는 문제이다. 이를 해결하기 위해 여러 동기화 기법이 등장하였다. 1. 동시성 문제는 왜 발생하는가 동시성 문제가 발생하면 무작위 게임을 하는 것과 같다. contex..

[OS] 스레드

1. 스레드와 멀티 스레드의 개념 spring에서 servlet이 해주는 스레드 관리라는 것이 있었다. 그것이 무엇인지 다루어 보자. 우리가 만든 c++ 코드를 실행하면 (프로세스) main서부터 한줄 씩 내려가면서 함수 타면서 왔다리 갔다리 한다. 이건 하나의 스레드가 움직이는 걸 본 것이다. 즉, 스레드란 실행 흐름을 의미한다. 멀티 스레딩이란 바로 하나의 프로세스 위에 실행 흐름이 여러 개인 것을 의미한다. 중요한 것은 스레드끼리 자원을 공유한다는 점이다. 이는 이점이기도 하고 단점이기도 하다. 통신은 쉽지만 그만큼 동시성 문제가 발생한다. 본격적으로 다루기 전에 다루어야 할 두 가지 키워드가 있다. - Concurrency: 동시 진행이라는 의미로 context switch처럼 두 개의 스레드가 ..

[OS] 스케줄링 2

0. 새로운 조건 사항 이제 새로운 상황이 부여 되었다. CPU time(burst)과 I/O time(burst) 둘로 나뉘었다. CPU time이란 CPU가 명령어를 실행하는데 소모하는 시간이고 I/O time은 cpu가 I/O 작업하는 걸 기다리는 시간이다. 즉, 이전 7상태 process에서 Running 상태일 때 두 가지 경우가 생긴 것이다. CPU가 작업을 하고 있거나 I/O 작업을 하고 있거나. 이를 CPU-I/O burst cycle이라고 부른다. 이런 특징에 따라서 process 도 종류가 나뉘었다. I/O bound와 CPU bound. I/O 작업 사이사이 CPU burst가 짧은 프로세스를 I/O bound라고 부른다. 이에 반해 I/O 작업 이전에 CPU time이 긴 proce..

카테고리 없음 2022.09.16

[OS] 스케줄링

0. 스케줄링의 종류 상대적으로 소요하는 시간에 따라 스케줄링의 종류가 분류 된다. Long > Medium > short 순으로 오래 걸린다. - Long-term scheduling (job scheduling): 어떤 프로그램들이 필요한지 결정하는데 걸리는 스케줄링을 말한다. - Medium-term scheduling (swapper): disk에서 memory로 어떤 process 들을 올릴지 결정한다. 어느 process 상태를 suspend queue로 만들지 결정하는 시간. - Short-term scheduling (CPU scheduler): 어느 프로세스를 cpu에게 진행 시켜지도록 할지 결정한다. 즉, 이전 시간에 코드로 배운 process_switch 함수 전에 어떤 녀석을 고를지..

[OS] 프로세스

0. 프로세스의 정의 프로그램과 프로세스.. 무슨 차이..? 프로그램은 실행되기전 binary의 집합체로서 disk에 저장되어 있는 파일일 뿐.. 이녀석들이 메모리에 올라오면서 실행 가능한 녀석이 된 후 실행 중이라면 프로세스라고 부른다. 즉, 두 수 입력하면 합을 출력해주는 프로그램을 실행하여 값 넣으면 프로세스가 되는 것이다. 여기서도 알 수 있듯, 이 덧셈 프로세스를 두 개 돌려서 다른 값 입력하면 다른 걸 출력 해야한다. 즉, 하나의 프로그램이 두 개의 프로세스로 변신했다는 것이당~ 간단하게는 실행 가능한, 실행중인 프로그램인 것이고 task, job 이라고 부르기도 한다. 1. PCB 이제 process 를 표현 하는 방법을 배워보자. process를 표현하는 관점은 크게 3가지가 존재할 것이다..

[OS] 자원 보호와 시스템 콜

0. 용어 정리 - 커널: 메모리에 상주하고 있는 OS의 일부이고, 주로 C로 쓰여져 있지만 레지스터를 많이 다루거나 자주 쓰이는 함수들은 어셈블러로 이루어져 있음. 시스템 콜을 통해 역할들을 수행해준다. - 유틸리티: 커널이 아니면 유틸리티라 생각하면 된다. 디스크에 상주해 있는 OS의 일부. 호출 시 메모리로 올라온다 - shell: 유틸리티를 위한 유틸리티. 명령을 제어하는 역할을 함. - Dual-Mode: 커널 모드와 유저 모드가 동시에 존재하고 두 모드 사이에 HW적인 지원을 제공하는 모드. 주 기능으로는 다음과 같다. * 유저는 직접 I/O에 명령어를 내릴 방법이 없음. (단적으로도 read() 시스템 콜를을까본다 해도 어떤 명령어가 있는게 아니라 명령어 번호 같은 정보만 있음. * 메모리 ..

[OS] os 개요

1. CPU와 메모리 컴퓨터의 기본 재료?라고 할까. 다 중요하지만 두 가지만 고르자면, CPU와 Memory라고 할 수 있다. - cpu: 명령어 처리 장치. 단지, 10010111 같이 들어온 명령어 bit를 해석하여 일련의 과정을 처리한다. 해석이라기 보다도 정해진 규칙에 따라 전기 신호를 줄지 말지를 결정하고 전기 신호에 따라 ALU들이 연산을 한다. 프로세서라고도 불린다. 최근에는 multicore가 기본적으로 시장에 자리잡고 있고 여기서 발생하는 다양한 이야기들이 펼쳐질 것이당. - 메모리: 유의할 점은 disk가 아닌 메모리. 즉 컴퓨터 꺼지면 날아가는 기억 장치이다. Static RAM(SRAM)과 Dynamic RAM(DRAM)으로 분류 되어 있다. 이때 RAM은 random access..