전체 글 228

[OS] Memory Management - Fixed Partitions, Variable Partitions, Overlays, Swapping, Virtual Address

1. 메모리 관리운영체제가 어떤 방식으로 피지컬한 메모리를 관리할까?메모리 관리의 목적은 다음과 같다.프로그래머에게 abstract view를 보여주는게 중요하다.프로그래머는 A.exe가 메모리의 어디에 위치하는지는 전혀 신경쓰지 않고 배열을 선언하는 등 편하게 사용한다. 그 이유는 운영체제가 피지컬한 메모리를 가상의 공간으로 잘 보여주기 때문이다.메모리는 부족한 자원인데, 이를 잘 나눠줘야 한다.여러 프로세스들이 메모리를 두고 경쟁하는 과정에서, 성능은 최대화시키면서 오버헤드는 최대한 줄여 잘 나눠줘야 한다.프로세스간 isolation을 제공해야 한다.프로세스마다 가상의 메모리를 각각 가지고 있고 서로의 메모리는 볼 수 없어야 한다.왜 메모리 관리가 어려울까?싱글 프로세스라면 OS 등의 메모리만 할당하..

CS/Operating System 2024.05.14

[OS] CPU 스케줄링의 기초적인 방식, FIFO, SJF, SRTF, RR, Priority scheduling

1. CPU SchedulingCPU에 코어가 하나가 있는데, 그 코어를 어떤 프로세스에 줄 것인가를 결정하는 문제이다.ready 상태에 있는 프로세스 중 다음에 실행할 프로세스 하나를 뽑는 문제이다.컨텍스트 스위치가 많이 일어나므로 CPU 스케줄러가 자주 일어나고, 그만큼 스케줄링이 빠르게 일어나야 한다.그림의 매 포인트마다 CPU 스케줄링이 일어난다.Scheduling algorithm goalsAll systems굶어죽는 프로세스가 있어서는 안된다. CPU를 계속 안받는 일이 일어나면 안되고 골고루 받아야 한다는 말이다.어떤 얘는 1초만 쓰고, 어떤 얘는 10초만 쓰면 공평하지 않다.밸런스도 생각해야 한다. 전체 시스템 파트, CPU 메모리 I/O가 골고루 바쁘게 돌 수 있도록 밸런스 있게 스케줄링..

CS/Operating System 2024.05.12

[백엔드] 웹 서버 VS WAS(앱 서버)

Static pagesimage, html, css, javascript 등 컴퓨터에 저장되어 있는 파일을 의미한다.웹 서버에서 요청에 알맞은 파일을 제공한다.같은 요청에 대해 정적으로 항상 같은 페이지를 반환한다.Dynamic pages들어온 요청에 맞게 동적으로 만들어진 콘텐츠를 의미한다.웹 애플리케이션 서버에서 제공하고, DB, 서버 내 로직 등을 활용해 만들어진 콘텐츠를 반환한다.웹 서버웹 서버는 HTTP 요청을 받아 static contents를 제공하는 서버를 말한다.웹 컨테이너를 거치지 않고 바로 요청한 정적 컨텐츠를 제공할 수 있다.동적인 컨텐츠를 요청하는 경우, 웹 컨테이너에 요청을 보낸다.웹 컨테이너동적인 데이터들을 처리하여, 정적인 페이지로 생성해 주는 소프트웨어 모듈이다.티스토리에서..

CS/백엔드 2024.05.05

[OS] 세마포어와 모니터를 통해 동기화 문제를 해결해보자! - 데드락, Starvation

spinlock의 문제점 [OS] 동기화 문제를 해결해보자! - Locks, Perterson’s AlgorithmLocks lock은 말 그대로 자물쇠 역할이다. 크리티컬 섹션에는 한 명만 들어가야 하는데, 들어갈 때 lock 하고, 나올 때 unlock 하는 방식으로 동기화 문제를 방지한다. acquire() : lock이 풀릴 때 까지 기다jun-n.tistory.com위의 글에서 동기화 문제 해결 방법으로 Locks을 공부했다. 그런데 사실 위에서 배운 Lock은 해결법 중 하나인 spinlock이다. spinlock 외에도 많은 Locks가 있는데, spinlock에 어떤 문제가 있어서 새로운 Lock이 등장하게 되었을까?spinlock은 CPU를 너무 낭비한다. (wasteful)spinloc..

CS/Operating System 2024.04.29

[OS] 동기화 문제를 해결해보자! - Locks, Perterson’s Algorithm

Locks lock은 말 그대로 자물쇠 역할이다. 크리티컬 섹션에는 한 명만 들어가야 하는데, 들어갈 때 lock 하고, 나올 때 unlock 하는 방식으로 동기화 문제를 방지한다. acquire() : lock이 풀릴 때 까지 기다렸다가 풀리면 잡는다. 풀려있다면 그냥 잡는다. 대기하다 보면 여러 쓰레드가 대기할 수 있다. 여러 쓰레드들을 다 고려해서 acquire()하는 메커니즘을 고려해야 한다. release() : unlock Lock은 초기에 열려있다. 크리티컬 섹션에 들어갈 때 acquire을 부르고 나올 때 release 한다. acquire과 release 사이에 쓰레드는 락을 잡고 있어야 한다. 또, 최대 하나의 쓰레드만이 락을 잡고 있어야 한다. 아래의 그림을 잘 이해하자! Lock은 ..

CS/Operating System 2024.04.13

[OS] Synchronization & Critical sections & Synchronization Problem

Synchronization 멀티쓰레드로 만들어진 프로그램들이 서로 잘 돌아가게 해야 한다. 여러 자원을 공유하는 멀티 쓰레드 프로그램들이 서로 잘 협력해야 한다. 멀티 쓰레드들이 실행되면서 문제를 일으킬 수 있는데, 그걸 Synchronization 문제라 한다. 이 협력을 통제해야만 문제가 생기지 않는다. 두 개의 쓰레드가 있는 프로세스를 생각해 보자. 쓰레드들의 스케줄링은 OS 내부의 스케줄러가 결정한다. 그런데 가끔, 쓰레드들의 실행 순서에 따라서 문제가 생기거나 결과가 바뀔 수 있다. 운영체제의 스케줄링을 프로그래머가 결정할 수 없다. 그런데 프로그래머는 스케줄링을 컨틀로 해야 할 때가 있다. 여러 쓰레드의 실행 순서, 프로세스들 간의 스케줄링을 컨트롤해야 할 때가 분명히 있다. 예시로 보자. ..

CS/Operating System 2024.04.13

[OS] User-level 쓰레드 VS 커널 쓰레드, Go Language

커널/유저 레벨 쓰레드 쓰레드는 누가 생성하고 관리할까? OS(커널)에서 시스템 콜을 통해 쓰레드를 생성하고 관리한다. pthreads도 OS가 관리하는 쓰레드이다. 유저 레벨 프로세스에서 라이브러리를 통해 쓰레드를 관리할 수 있다. 어떤 쓰레드가 더 좋을까? 예를 들어서 생각해 보자. 팩토리얼을 재귀로 구현하면 함수가 계속 불리고, 함수를 시작하고 끝내기 위해 그만큼 어셈블리어 코드가 몇 줄씩 들어가게 된다. 따라서 성능적인 측면에서 반복문을 사용하는 방식이 좋다. 또, local function으로 myswap() 같은 걸 만들 수 있다. 또 library function으로 strcpy() 같은 것도 있고, system call에도 getpid() 같은 게 있다. 만약 세 함수가 모두 같은 역할을 ..

CS/Operating System 2024.04.12

[OS] 프로세스와 쓰레드의 비교, pthreads, Signal handling

Processes vs Threads 쓰레드는 하나의 프로세스에 담겨있다. 반면에, 프로세스는 멀티플 쓰레드를 가질 수 있다. 쓰레드끼리는 같은 address 내에 있으니 싸게 데이터를 공유할 수 있다. 쓰레드는 운영체제가 관리하는 스케줄링의 단위가 된다. 프로세스는 쓰레드를 수용하기 위한 컨테이너로 생각하면 된다. 프로세스와 쓰레드의 유사한 점 각자의 로지컬한 control flow를 가질 수 있다. 각자 동시에 다른 것들과 실행될 수 있다. 컨텍스트 스위치 프로세스와 쓰레드의 차이점 쓰레드는 코드와 데이터를 공유한다. 그러나, 프로세스는 그렇지 않다. 같은 코드와 데이터를 복제해 온다. 쓰레드가 프로세스보다 훨씬 저렴하다. 리눅스에선 거의 2배 차이. address space를 새로 만들지 않아도 되..

CS/Operating System 2024.04.11

[OS] 프로세스의 단점과 쓰레드의 도입, 멀티 쓰레딩의 장점

프로세스의 단점 프로세스도 좋지만 프로세스는 Heavy-weight이다. 프로세스 다음의 많은 요소를 포함해야 한다. address space OS resources Hardware execution state (PC, SP, registers 등등) 또, 프로세스를 생성하는 것은 data structure가 반드시 할당되어야 하 초기화되어야 하므로 비싸다. 프로세스 안에서 커뮤니케이션 하는 것 또한 항상 OS를 통해야 하므로 비싸다. 시스템 콜과 데이터를 복제하는 오버헤드가 들기 때문이다. 웹 서버 예제를 보자. while(1){ int sock = accept(){ if((pid = fork()) == 0){ // Handle client request } else{ // Close socket } ..

CS/Operating System 2024.04.09

[HTML] <pre> 태그, 주석 등 Text Elements

태그 태그는 "preformatted text"를 나타내는 데 사용된다. 일반적으로 코드 블록이나 서식이 있는 텍스트를 나타내는 데 사용된다. 사용 예시 It's commonly used for displaying code: function greet() { console.log("Hello, world!"); } You can also use pre tags to display ASCII art: _______ // 6 6 \\ // ^ ^ \\ ( ( O ) ) \\ _______ // \\_________// // \\ // \\ // \\ --------------- 텍스트 서식과 관련된 태그들 : 강조 : 코드임을 표시 , : 윗 첨자/ 아랫첨자 : 가로 구분선 : : 공백 " : " ..