목록분류 전체보기 (237)
Machineboy空
7가지의 CPU 알고리즘 아이디어와 작동 방식 정도 숙지하기. 선입 선처리 스케줄링 (FCFS, First Come First Served) 최단 작업 우선 스케줄링 (SJF, Shortest Job First) 라운드 로빈 스케줄링 (RR, Round Robin) 최소 잔여 시간 우선 스케줄링 SRT, Shortest Remaining Time) 우선순위 스케줄링 다단계 큐 스케줄링 (Multilevel queue) 다단계 피드백 큐 스케줄링 (Mulitilevel feedback queue) 선입 선처리 스케줄링 (FCFS, First Come First Served) 단순히 준비 큐에 삽입된 순서대로 처리하는 비선점 스케줄링. 먼저 CPU를 요청한 프로세스부터 CPU 할당. 단점: 프로세스들이 기다..
프로세스 우선순위 (Priority) 가장 공정한 CPU 스케줄링은? CPU를 사용하고 싶어하는 프로세스들이 차례로 돌아가는 것? 빨리 처리해야하는 프로세스가 있음 = 프로세스마다 우선순위가 다르기 때문 입출력 작업이 많은 프로세스 (= 입출력 집중 프로세스, I/O bound process)의 우선순위는 CPU작업이 많은 프로세스 (= CPU 집중 프로세스, CPU bound process)의 우선순위보다 높다 입출력 집중 프로세스가 실행 상태보다 대기 상태에 더 많이 머무르게 될 것. 그래서 CPU를 한동안 안쓸 것임. 그래서 빨리 처리할 수 있는 입출력 집중프로젝트를 먼저 처리. 스케줄링 큐 운영체제 입장에서 다음 프로세스를 정하기 위해서 모든 프로세스의 PCB를 뒤적이는 것은 비효율적. 입출력 프..
스레드(thread)란? 이번 내용에선 (소프트웨어) 스레드를 의미. *스레드(thread) = 프로세스를 구성하는 실행 흐름의 단위 스레드(thread)의 구성 요소 스레드는 무엇으로 구성되어 있길래, 실행 흐름을 나눠서 실행할 수 있을까? 실행에 필요한 최소한의 정보를 유지하고 있다. 스레드 ID 프로그램 카운터를 비롯한 레지스터 값 스택 등 프로세스를 이루는 스레드(thread)들은 프로세스의 자원을 공유하며 실행된다. thread 1,2,3은 병행 실행된다고 하나, 같은 코드 영역, 데이터 영역을 공유하고 있다. 스레드 별로 다른 영역이 주어지는 것이 아니다. 실제로 요즘, 처리해야할 작업을 CPU에게 전달할 때 통째로 process단위가 아닌 thread 단위로 전달하는 추세 멀티 프로세스와 멀..
운영체제는 프로세스의 상태를 PCB(Process Control Block)에 기록해서 관리한다. 모든 운영체제는 아니지만 대부분의 운영체제는 이런 프로세스의 상태를 계층적으로 관리한다. 프로세스 상태 (Process State) *프로세스 상태는 운영체제마다 조금씩 차이가 있다. 생성 상태 보조기억장치에 있던 데이터 덩어리가, 이제 막 메모리에 적재되어 PCB를 할당,발급받은 상태 *프로세스가 종료되면 PCB를 종료함 준비가 완료되었다면 준비 상태로 준비 상태 (Ready State) 당장이라도 CPU를 할당 받아 실행할 수 있지만, 자신의 차례가 아니기에 기다리는 상태 자신의 차례가 된다면 준비 상태에서 실행 상태로 접어드는 것 = 디스패치 (dispatch) 실행 상태 (Running State) ..
프로세스란? 프로그램은 실행되기 전까지 데이터 덩어리로서 보조기억장치에 저장되어 있다가 실행해서 메모리에 적재되는 순간 프로세스(process)가 된다. 이 과정을 프로세스를 생성한다고 말하기도 한다. 프로세스(process)의 종류 포그라운드 프로세스 (foreground process) 백그라운드 프로세스(background process) 사용자가 볼 수 있는 공간에서 실행되는 프로세스 사용자가 볼 수 없는 공간에서 실행되는 프로세스 메모장, 게임 등 사용자와 직접 상호작용이 가능한 백그라운드 프로세스 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스 데몬(daemon), 서비스(service) CPU가 프로세스를 어떻게 관리하는지 프로세스 제어 블록 모든 프로세스는 실행을 위해 CPU..
그동안 Window 기반으로 Visual Studio를 사용하다가 Mac으로 바꾸고 VS Code로 개발 환경 세팅하느라 애를 먹었다. * IDE(Integrated Development and Learning Environment, 통합개발환경) 인텔리센스 등을 활용해 자동완성을 시키기도 하고 텍스트 에디터, 컴파일러, 테스트, 디버거까지 전반적 개발을 진행할 수 있는 소프트웨어 프로그램. Microsoft의 visual studio, vs code Apple의 Xcode, JetBrain의 IntelliJ 등 다양한 IDE가 존재하고 개발 특성에 맞는 IDE를 사용하면 된다. (IDE까진 아니지만 텍스트 에디터 Sublime Text 등) * VM(Virtual Machine) c#을 실행하기 위해서..
포인터를 직접 사용해야 하는 언어들 즉, 메모리 관리를 직접할 수 있는 언어들. 메모리 관리를 가비지 컬렉터(garbage collector)가 아닌 사용자가 직접해주어야 하는 언어. *가비지 컬렉터(garbage collector): 메모리 영역 중 더 이상 쓰이지 않는 영역을 자동으로 찾아내 해제하는 것 C, C++ 등은 가비지 컬렉터가 없고, 개발자가 직접 필요한 메모리를 예약하고 해제. 이에 사용되는 수단 중 하나가 포인터(pointer). 비유하자면 기다란 집게 같은 것. Unmanaged 언어 정도의 low-level 언어들에서 지원된다. C#같은 언어에서도 포인터를 쓰는 방법이 있지만 권장되지 않는 이유 = 메모리 주소에 직접 접근하는 것은 보안상 해킹 위험 등이 발생할 수 있기 때문 메..
필수 개념 1) 커널이란? 2) 운영체제의 서비스 종류? 3) 시스템 콜과 이중 모드란? 운영체제는 현존하는 프로그램 중 가장 규모가 큰 프로그램 중 하나! 규모만 클 뿐 아니라 종류도 다양해서 제공하는 기능이 다양하다. but 가장 핵심적인 서비스는 존재한다. *같은 스마트폰이라도 아이폰과 갤럭시의 기능이 다르듯, 하지만 스마트폰의 핵심적 기능(전화, 와이파이 연결 등)은 존재 * 컴퓨터의 경우, 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능 운영체제의 심장, 커널(kernel) 운영체제의 핵심 서비스를 담당하는 부분을 커널(kernel)이라고 한다. 거의 운영체제가 곧 커널을 지칭한다고 봐도 된다. 하지만 운영체제에는 속하는데 커널에는 속하지 않는 기능? 유저 인터페..