CS/운영체제 (28) 썸네일형 리스트형 (1) 운영체제에 관해서_ 메모리에 대해서 설명해주세요 메모리 구조는 4가지 영역으로 나뉘어 집니다. 코드영역은 실행할 프로그램의 코드가 저장되는 영역입니다. 사용자가 프로그램을 실행하면, OS가 실행 코드를 메모리로 로드하고, CPU는 코드영역에 저장된 명령을 하나씩 처리하게 됩니다. 데이터 영역은 프로그램의 전역 변수, 정적 변수가 저장되는 영역이며, 프로그램의 시작과 함께 할당되며, 종료되면 소멸됩니다. 힙 영역은 코드에서 생성된 객체가 저장됩니다. 또한, 메모리를 동적으로 할당하며, 힙 영역은 스택 영역과 달리 낮은 주소에서 높은 주소로 메모리가 할당됩니다. 스택 영역은 함수의 호출과 함께 할당되며 지역 변수와 매개 변수가 저장되는 영역입니다. 스택 영역은 함수의 호출이 완료되면 소멸하고, 스택 영역은 높은 주소에서 낮은 .. 동기화(Syncronization)를 왜 해야하는데!? 초읽기 왜 동기화가 중요한지? 동기화를 왜 해야하는지!? 가정을 해보겠습니다. 상황 매우 중요한 상황 이해해야하는 상황 싱글코어에 두개의 스레드를 가진 한 프로세스 그리고 멀티태스킹이 진행중인 상황입니다. 오렌지박스1 = 5개의 불량 오렌지, 오렌지박스 2 = 2개의 불량 오렌지가 있다고 가정합시다. 오렌지박스 내부에 오렌지 상태가 나쁜 애들을 골라서 갯수를 세줘야 하는 상황이고, 그 박스는 2개이며 한 박스를 한 스레드마다 맡겨둔 상황입니다. 그렇다면 결과적으로 7개를 카운트 해줘야합니다. 하지만 오류가 발생할 수 있습니다. 프로그래밍 언어는 오로지 개발자에 맞춰진 언어 이기 때문에 CPU가 이해하지 못하는 언어이므로 CPU에게 맞춰진 언어로 번역이 됩니다. 그 상황에서 CPU언어로 쓰자면 이렇습니다... 멀티 태스킹과 스레딩과 프로세싱[Multi tasking & Threading & Processing] 초읽기 Program 컴퓨터가 실행할 수 있는 명령어들의 집합 CPU 명령어를 실행하는 연산장치 MainMemory 프로세스가 CPU에서 실행되기 위해 대기하는 곳 IO(input/output) 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고 받음 입출력 장치와 데이터를 주거나 받는것 프로세스(Process) 컴퓨터에서 실행중인 프로그램(Program)입니다. Program : 컴퓨터가 실행할 수 있는 명령어들의 집합 각각의 프로세스는 독립된 메모리 공간을 할당 받습니다. 명령어들과 데이터를 가집니다. 스레드(Tread) 프로세스는 한 개 이상의 스레드를 가질 수 있습니다. 동시에 여러 작업을 하게 해줄 수 있는 방법 CPU에서 실행되는 단위입니다. 컨텍스트 스위칭(Context Switching).. 어바웃 CPU Bound와 IO Bound CPU Bound와 IO Bound에 대해서, 그리고 CPU와 IO Bound로 구현한 프로그램에 몇 개의 스레드를 지정해야 하는지! CPU란?(Central Processing Unit) 프로세스의 명령어를 해석하고 실행하는 장치 IO(Input/Output) 파일을 읽고 쓰거나, 네트워크 어딘가와 데이터를 주고 받는 것, 입출력 장치와 데이터를 주거나 받는 것! CPU Burst 프로세스가 CPU에서 한 번에 연속적으로 실행되는 시간이며 메모리에 있는 프로세스가 자신의 차례가 되어 CPU에서 연산이 될 때 연속적으로 실행된 시간을 의미합니다. IO Burst 프로세스가 IO 작업을 요청하고 결과를 기다리는 시간을 의미합니다. 버스트(Burst) 어떤 현상이 짧은 시간안에 집중적으로 일어나는 것을 의미.. 페이징(paging)과 세그멘테이션(Segmentation) 메모리 적재 분할 방법 단편화 페이징, 세그멘테이션 메모리 적재 연속 메모리 적재 방법 초기 컴퓨터 시스템에서 사용 직접배치, 중첩, 고정 분할 방법 등이 해당 크기가 다른 프로세스에 모두 같은 크기의 메모리를 할당하여 메모리 낭비 초래함 내부 또는 외부 단편화 문제가 발생할 수 있음 비연속(분산) 메모리 적재 방법 외부 단편화를 해결하고, 내부 단편화를 최소화하려고 소개한 새로운 방법 프로그램 하나가 물리적 주소의 여러 공간에서 분산해서 올라갈 수 있도록 하는 방법 고정 분할 방법 논리적 주소가 분할된 메모리보다 크면 오류가 발생하고, 작으면 내부 단편화(Internal Fragmentation)가 발생한다. 페이징(paging) 프로그램 하나를 분할하는 기준에 따라 동일한 크기로 나눠 메모리로 적재하.. CPU 스케줄링(CPU Scheduling) 스케줄링(Scheduling) 여러 프로세스가 번갈아 사용하는 자원을 어떤 시점에 어떤 프로세스에 할당할지 결정하는 것을 의미한다. 스케줄링의 목적 자원할당의 공정성을 보장 단위시간당 처리량 최대화 적절한 반환시간을 보장 예측 가능성 보장과 오버헤드 최소화 등이 있다. 프로세스에 프로세서가 할당되면 다음 사항중 하나가 일어나게 된다. 프로세스가 입출력 요청을 보내고 입출력 큐에 들어간다 프로세스가 새로운 프로세스를 생성(fork)하고 생성한 프로세스의 종료를 기다린다. 프로세스가 시간 할당량을 초과(시간 종료 time out)하면 준비큐에 들어간다. 인터럽트로 프로세서에서 제거된 프로세스는 다시 준비큐에 들어간다. 비선점 & 선점 스케줄링 비선점 스케줄링(Non Preemptive Scheduling) .. 교착상태(Dead Lock)란???(feat.기아상태) 교착상태란? 모든 스레드가 락이 풀리기를 기다리고 있는 상태, 무한 대기 상태에 빠짐 프로세스가 자원을 얻지 못해서 다음 처리를 못하는 상태 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생 프로세스가 결코 일어나지 않을 사건을 기다리는 상태가 되면 교착 상태라고 하며, 두 프로세스가 사용하는 자원을 서로 기다리고 있을 때 발생합니다. 주로 발생하는 이유 멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황이 발생됩니다. 한 프로세스가 자원을 요청했을 때, 동시에 그 자원을 사용할 수 없는 상황이 발생할 수 있음, 이 상황에서 프로세스는 대기 상태로 들어가며 들어간 프로세스들이 실행 상태로 변경될 수 없을 때 교착 상태가 발생하게 됩니다. 교착 상태의 4가지 조건 교착 상태가.. 시스템 콜(System Call)이 뭐야? 시스템 호출이 책에도 써있듯이 올바른 말이지만 시스템 콜이 익숙하기에 시스템 콜로 하겠습니다. 시스템 콜(system call)은 실행 중인 프로그램과 운영체제 간의 인터페이스로, API라고도 한다. 사용자 프로그램은 시스템 콜(System call)을 하여 운영체제의 기능을 제공받는다. 운영체제의 커널모드? 사용자 모드? 1. 커널 모드 프로그램 카운터가 운영체제가 존재하는 부분을 가리키고 있다면, 1) 현재 운영체제의 코드를 수행 중이며 2) CPU가 커널 모드에서 수행 중이라고 한다. 2. 사용자 모드 프로그램 카운터가 사용자 프로그램이 존재하는 메모리 위치를 가리킬 경우, 1) 사용자 프로그램을 수행 중이며 2) CPU가 사용자 모드에서 수행 중이라고 한다. 일반 명령 : 메모리에서 자료를 읽어와.. 이전 1 2 3 4 다음