일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Ultimate Search
- algorithm
- 백트래킹
- 리트코드
- 네이버 검색 시스템
- Algorithmus
- 격리수준
- Pro-Con
- Python
- SRE
- 알고리즘
- Github
- 프로그래머스
- git
- 제노블레이드 2
- C++
- baekjoon
- LeetCode
- python3
- ASF-110
- programmers
- 알고리즘 종류 정리
- DP
- 프로콘 갈림현상
- 취준
- 자소서
- 백준
- 프로콘
- 코딩테스트
- GitHub Desktop
- Today
- Total
목록Computer Science/운영체제 (8)
산타는 없다
비선점 스케줄링 알고리즘은 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스캐줄링 기법입니다. 프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용하게 됩니다. 모든 프로세스에 대한 요구를 공정하게 처리할 수 있고 프로세스 응답 시간의 예측이 용이하며, 일괄 처리 방식에 적합하다는 장점이 있습니다. 하지만 중요한 작업(짧은 작업)이 중요하지 않은 작업(긴 작업)을 기다리는 경우가 발생할 수 있다는 단점이 있습니다. 비선점 스케줄링 알고리즘으론 FCFS, SJF, 우선순위, HRN, 기한부 등의 알고리즘이 있습니다. 그 중 FCFS, SJF, HRN 알고리즘에 대해서 알아보겠습니다. 성능 기준 스케줄링 성능은 평균 대기 시간, 평균 실행 시간, 평균 반환 시간으로..
프로세스 프로세스는 실행되고 있는 프로그램의 인스턴스라고 생각할 수 있습니다. 즉, 실행중인 프로그램을 의미하며, 작업(job), 태스크(Task)라고도 합니다. (인스턴스[instance] : 컴퓨터 저장공간에서 할당된 실체) 이러한 프로세스는 운영체제로 부터 CPU 시간 메모리 등의 시스템 자원을 할당받아 실행됩니다. 운영체제는 자원을 할당해준 프로세스를 관리하기 위해 PCB(Process Control Block)를 생성하여 저장하고 프로세스가 완료되면 제거합니다. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수가 자료구조에 접근할 수 없습니다. 만약, 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC, inter-process communi..
공유 자원의 동기화 프로세스 안에서 생성된 스레드들은 코드, 데이터, 힙 메모리 영역을 공유하고 스택 영역만 스레드 별로 고유하게 가지게 됩니다. 스레드가 서로 데이터를 공유할 수 있다는 점은 장점이긴 하지만 두 스레드가 같은 자원을 동시에 변경하는 경우에는 문제가 발생할 수 있습니다. 때문에 공유 자원에 대한 접근을 제어하기 위한 동기화 처리를 하게 됩니다. MFC Api에선 CCriticalSection 클래스를 제공하여 동기화 처리를 할 수 있습니다. 이런 동기화 처리는 여러 스레드가 같은 객체를 동시에 실행하는 것을 방지해 줍니다. 세밀하게 제어한다면 lock(or monitor)를 사용하여 접근을 동기화 할 수 있습니다. 특정 시점에 락을 쥐고 있을 수 있는 스레드는 하나뿐이며 따라서 해당 공유..
동적/공유 라이브러리는 런타임에 링크/로드되는 라이브러리입니다. 공유 라이브러리(Dynamic Linking)와 동적 라이브러리(Dynamic Loading)는 똑같이 런타임에 메모리에 적재되는데 공유 라이브러리는 응용 프로그램이 시작되는 순간에 메모리에 적재되고 동적 라이브러리는 응용 프로그램이 라이브러리의 내용이 필요할 때 적재하게 됩니다. 동적 라이브러리는 이를 사용하고자 하는 실행 바이너리에서 필요시 사용할 수 있도록 최소한의 정보만 포함하여 링크하거나, 아예 독립적으로 로드/사용/해제할 수 있습니다. 동적 라이브러리의 특징 동적 라이브러리는 정적 라이브러리와 다르게 컴파일할 때 코드가 복사되지 않고 프로그램 시작 시 로딩됩니다. 이때 메모리에 이미 로딩되어 있다면 라이브러리 코드 영역을 공유해서..
정적 라이브러리는 컴파일타임에 링킹되는 라이브러리입니다. 정적 라이브러리가 링킹되는 것을 정적 링킹(Static Linking)이라고 합니다. 정적 링킹은 실행파일을 만들 때 프로그램에서 사용하는 모든 라이브러리 모듈을 복사하는 방식을 말하며 링커에 의해 이루어집니다. 즉, 자신이 작성한 프로그램에서 A라는 외부 함수를 사용했다면, A라는 외부 함수에 대한 정보를 자신이 작성한 프로그램의 실행파일을 만들 때 복사해 옵니다. 이렇게 모든 라이브러리 모듈을 복사하기 때문에 실행시 별도의 라이브러리 파일이 필요하지 않습니다. 하지만 실행 파일 내에 라이브러리 코드가 저장되기 때문에 프로그램 크기가 커지고 메모리 효율이 좋지 않습니다. 여기서 메모리 효율이 좋지 않다는 것은 각각의 프로세스에서 라이브러리가 할당..
라이브러리(Library)는 다른 프로그램들과 링크되기 위하여 존재하는 하나 이상의 서브루틴(subroutine)이나 함수(function)들의 집합 파일입니다. 라이브러리는 재사용이 필요한 기능이 반복적인 코드 작성을 하지 않고 언제든지 필요한 곳에서 호출하여 사용한다는 목적을 가지고 만들어집니다. 링크될 수 있도록 보통 컴파일된 형태인 목적 코드(object code)형태로 존재하며 미리 컴파일 되어 있기 때문에 컴파일 시간도 단축됩니다. 라이브러리는 크게 정적 라이브러리와 동적 라이브러리 두 종류로 사용됩니다. 두 라이브러리의 가장 큰 차이점은 실행파일에 링킹되는 시점입니다. 정적 라이브러리 / Static Library / Lib 작성된 소스 코드는 번역 프로그램(컴파일러, 인터프리터 등)을 통해..
일반적으로 실행 파일을 생성할 때 링킹 과정에서 기계어로 번역된 목적 프로그램(오브젝트 파일 / .obj)과 라이브러리를 연결하여 만들게 됩니다. 하지만 이것은 .lib 즉 정적 라이브러리 파일에 한정된 동작입니다. 만약에 프로그램이 사용하는 라이브러리가 dll이면 라이브러리는 런타임 중에 로드하게 됩니다. 라이브러리는 정적 라이브러리(.lib)와 동적 라이브러리(.dll)로 나눠어집니다. 정적 라이브러리 (Lib) 정적 라이브러리는 소스 코드가 컴파일되어 실행 파일로 만들어 질 때 링크 과정에서 소스 코드가 번역 돼 기계어로 만들어진 목적 프로그램과 연결됩니다. 연결되면서 exe 파일 안에 필요한 Lib의 내용이 복사 됩니다. 이렇게되면 프로그램이 무거워지고 메모리를 많이 차지하게 됩니다. 동적 라이브..
Locality(국부성, 지역성, 구역성, 국소성) - 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질 스래싱(Thrashing)을 방지하기 위한 워킹 셋(Working Set 이론의 기반이 되었다. 프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나로, 가상기억장치 관리의 이론적인 근거 캐시 메모리 시스템의 이론적인 근거 Locality의 종류 시간 구역성 (Temporal Locality) 시간 구역성은 프로세스가 실행되면서 하나의 페이지를 일정 시간 동안 집중적으로 액세스하는 현상이다. 한 번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높음을 의미 시간 구역성이 이루어지는 기억 장소 : Loop(반복, 순환), 스택(Stack), 부 프..