본문 바로가기

컴퓨터공학기초 개념/운영체제41

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.
29. 스레드(Thread) - 교착(Deadlock)과 기아(Starvation)상태 1. 개요 - 스레드 동기화 문제를 해결하기 위해서, 임계영역에 접근하는 순서를 프로그래밍한다. - 잘못된 로직을 작성하면 모든 스레드가 대기상태에 걸리거나, 특정 스레드가 아예 접근 기회를 얻지 못하게 된다. - 교착 상태와 기아 상태의 형태는 이론적으로 존재하지만, 특정한 해결 방안은 존재하지 않는다. - 그 이유는 프로그램 구조에 따라 해결방법이 천차만별 다르기 때문이다. - 그러므로, 본 포스팅에서는 Deadlock과 Starvation의 개념과 원인에 대해 작성한다. 2. Deadlock(교착 상태) - Deadlock은 무한 대기 상태를 의미한다. - 즉, 대기중인 두개 이상의 스레드가 서로의 작업이 완료되기를 기다리는 상황을 의미한다. [Thread A] a = "임계자원" lock.acqu.. 2021. 7. 5.
28. 스레드(Thread) - 세마포어(Semaphore) - 이전 포스팅에서 동기화 이슈에 관해 그 문제점과 해결책에 대해서 알아보았다. - 이번 포스팅에서는 동기화 이슈에 관련된 내용을 간략하게 정리하고 전반적인 해결방법에 대해 알아보자. 1. 동기화(Synchronization) 이슈란? - 여러 스레드가 동일한 자원(데이터)에 접근하여 동시 수정을 하는 경우 발생하는 문제 - 연산 누락, 변수값의 변경 등 계산 결과에 오류를 만든다. * 알고 가자!!! - 동기화 문제는 다중 쓰레드, 다중 프로세스 사용 시 발생하는 문제이다. - 아래의 설명에 나온 해결방안이 꼭 다중 쓰레드를 대상으로만 사용되는 것은 아니다. - 다중 프로세스 사용 시 동기화 문제를 해결하는 방법이기도 하다. 2. 동기화 이슈의 해결방법 - 비동기(= 순차적) 작업처리 - 즉, 스레드 .. 2021. 7. 5.
27. 스레드 동기화 이슈 해결방법 - 본 포스팅을 읽기 전에, 이전 포스팅 26.스레드 동기화를 먼저 읽는 것을 권장합니다. 1. 스레드 동기화 이슈의 원인 # 파이썬 코드입니다. import threading g_count = 0 def thread_main(): global g_count for i in range(10000): g_count = g_count + 1 threads = [] for i in range(50): th = threading.Thread(target=thread_main) threads.append(th) for th in threads: th.start() for th in threads: th.join() print('g_count = ', g_count) 이전 포스팅에서 위의 코드를 이용해 스레드 동기.. 2021. 5. 11.
26. 스레드(Thread) - 동기화(Synchronization) 1. 동기화 이슈란? - 다수의 프로세스 또는 다수의 쓰레드가 하나의 데이터에 대한 동시접근 및 사용으로 인해 발생하는 문제를 의미한다. - 아래의 예시를 참고하자. 한 프로세스 내부에 스레드 A, B, C가 있다. 스레드 A, B, C가 공유하는 example 이라는 변수(= 데이터)가 있다. 스레드 A, B, C는 example의 값을 변경하는 연산을 수행한다. 스레드 A, B, C는 example의 값을 계속해서 변경시키고 동시에 참조하는 과정을 반복하게 된다. 그 결과, 연산 누락이 발생하여 비정상적인 결과값이 나온다. - 이와 같은 현상을 스레드의 동기화 이슈/문제 라고 부른다. 2. 예제 코드를 통한 스레드 동기화 이슈의 이해 a) 예제 코드 # 파이썬 코드입니다. import threadin.. 2021. 5. 11.
25. 스레드의 장단점 1. 스레드의 장점 a) 사용자에 대한 응답성 향상 하나의 프로세스 안에서 하나 이상의 작업(멀티 테스킹, 멀티 프로세싱)을 가능하기 때문 b) 자원 공유의 효율성 프로세스간의 자원 또는 데이터 공유를 위한 IPC와 같은 번거로운 작업이 필요없음 프로세스 내부에서 스레드 간의 소통이 가능하기 때문 번거로운 작업이 필요 없기에 그만큼 자원을 적게 사용한다는 의미 c) 작업 분리를 통한 코드의 간결화 각 스레드의 작업에 맞게 코드를 작성하기 때문 하지만, 개발자가 작성하기 나름. 즉, 개발자의 실력에 따라 편차가 크다. 2. 스레드의 단점 a) 여러 스레드 중 하나에만 문제가 생겨도, 전체 프로세스가 영향을 받음 스레드는 하나의 프로세스 안에 존재함 여러 스레드 중 하나라도 문제가 생기면 프로세스 자체에 문.. 2021. 5. 4.
24. 스레드란? (thread 개념) 0. 프로세스 부분을 끝낸 기념으로... - 컴퓨터 시스템은 다음과 같이 이루어져 있다. - Windows나 Mac과 같은 시스템 SW 또는 OS를 만드는 사람을 시스템 엔지니어라고 부른다. - 시스템 엔지니어가 만든 함수(api, library, etc)의 사용법을 익히고 응용하는 것이 응용 프로그래머다. - 시스템 엔지니어가 만든 함수를 익히는 대표적인 방법 중 하나가 python이나 java같은 언어를 배우는 것이다. - 좋은 개발자가 되기 위해서는 응용 프로그램의 영역뿐만 아니라 시스템 영역을 아는 것이 핵심이다. - 모든것을 한번에 완벽히 이해하기는 힘들지만, 좋은 개발자가 되기 위한 밑거름을 만들고 있다고 생각하자. 1. Thread 개념 스레드는 다른 이름으로 Light Weight Proc.. 2021. 4. 29.