CS/OS

·CS/OS
교착상태(Deadlock)둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황이다.간단하게 이해를 도울 수 있는 그림을 그려보았다.치킨을 사먹기 위해 돈이 필요한데 서로 돈을 빌려달라고 요구하는 중이다.결국에는 아무도 돈을 빌려주지 않고 상대방이 빌려줄 때까지 기다리는 상태로 남아있게 되고 최종적으로 영원히 치킨을 사 먹지 못하게 된다.다시 설명을 해보자면 어떤 프로세스가 자원을 점유하고 있는 상태에서 다른 프로세스가 점유하고 있는 자원을 기다리게 되고(wait) 결국에는 작업을 끝마치지 못한 채 무한 대기에 빠져버리는 상황을 교착 상태라고 한다.  교착 상태 발생 조건교착 상태가 발생하 조건은 크게 4가지로 분류된다. 상호 배제(Mutual Exclusio..
·CS/OS
동기화(Synchronization)여러 프로세스가 공유하는 자원의 일관성을 유지하는 것을 동기화라고 한다.여러 프로세스가 서로 협력해 공유 자원을 사용하는 상황에서 경쟁 조건(Race Condition)이 발생하면 공유 자원의 신뢰성이 떨어진다. 이를 방지하기 위해 프로세스들이 공유자원을 사용할 때 특별한 규칙을 만든다.프로세스 간 메시지를 전송하거나 공유 메모리를 통해 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 임계 영역 문제가 발생할 수 있다.이를 해결하기 위해 데이터를 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 두는 방식이 동기화이다. Race Condition(경쟁 조건)여러 프로세스 혹은 스레드가 공유자원에 동시에 접근할 때 공유자원에 대한 접근 순서에 따라 실행 결과가 달라..
·CS/OS
TLB(Translation Lookaside Buffers)이전에 살펴봤던 페이징에서 가상 주소와 실제 물리 메모리의 주소를 매핑해 주는 페이지 테이블이라는 자료구조가 있었다. 운영체제 - 페이징과 세그먼테이션세그멘테이션(Segmentation)세그멘테이션은 메모리 관리 기법 중 하나로 메모리의 효율적인 사용과 프로그램의 보다 유연한 배치를 가능하게 해 준다. 세그멘테이션은 주소 공간을 논리적으로 분hotechstory.tistory.com 페이지 테이블은 물리 메모리에 저장되는데 그로 인해서 프로세스가 가상 주소를 통해 메모리에 접근하게 되면 페이지 테이블을 참조하여 실제 물리 주소를 얻게 되는 주소 변환(Address Translation) 과정이 이뤄지게 된다.문제는 이러한 주소 변환 과정을 수행..
·CS/OS
페이지 교체 알고리즘이전 포스팅에서 요구 페이징에 대해서 알아보았다. 요구 페이징에서 Backing Store에 있는 페이지를 물리 메모리로 불러오는 작업을 진행하게 되는데 여기서 물리 메모리에 빈 공간이 없을 경우 페이지 교체 알고리즘을 통해서 기존의 페이지를 바꿔주는 작업이 필요하게 된다. 운영체제 - 요구 페이징요구 페이징(Demand Paging)이전에 가상 메모리 포스팅을 할 때 했던 얘기가 있는데 만약 내가 하고 싶은 게임의 용량이 20GB인데 어떻게 16GB 메모리에서 실행될 수 있을까? 라는 얘기를 잠깐 했었다.hotechstory.tistory.com 페이지 교체 알고리즘은 빈 공간이 없는 물리 메모리 공간에서 희생당할 프레임(Victim Frame)을 골라 교체하는 알고리즘을 의미한다...
·CS/OS
요구 페이징(Demand Paging)이전에 가상 메모리 포스팅을 할 때 했던 얘기가 있는데 만약 내가 하고 싶은 게임의 용량이 20GB인데 어떻게 16GB 메모리에서 실행될 수 있을까? 라는 얘기를 잠깐 했었다. 실행에 필요한 메모리 용량보다 훨씬 적은 메인 메모리를 가지고 있으면서도 돌아갈 수 있었던 이유는 실행에 필요한 부분만 메모리에 올려서 실행했기 때문인데 이러한 기능을 해주는 것이 요구 페이징(Demand Paging)이다. 실제로 게임을 다운받아 보거나 직접 프로그램을 개발해 보면 굳이 필요 없는(프로그램이 돌아가는데 필수적이지 않은) 파일들이 많은 것을 알 수 있다. 이처럼 프로세스를 실행 시 모든 부분이 필요하지 않기 때문에 실행에 필요한 부분만 메모리에 올려 메인 메모리에 올라가는 프로..
·CS/OS
세그멘테이션(Segmentation)세그멘테이션은 메모리 관리 기법 중 하나로 메모리의 효율적인 사용과 프로그램의 보다 유연한 배치를 가능하게 해 준다. 세그멘테이션은 주소 공간을 논리적으로 분할하여 각각의 세그먼트에 대해 대해 별도의 베이스와 바운드 쌍을 할당하여 메모리 관리 장치에 저장하는 방식이다. 세그먼트(Segment)세그먼트는 특정 길이를 가지는 연속적인 주소 공간을 나타내며 일반적으로는 코드, 스택 및 힙 등과 같이 프로그램이나 데이터의 논리적인 부분을 나타낸다. 세그멘테이션을 사용하면 운영 체제는 각 세그먼트를 메모리에 별도로 배치함으로써 프로그램이나 데이터를 물리 메모리의 다양한 위치에 할당할 수 있다. 또한 사용되지 않는 가상 주소 공간이 물리 메모리를 차지하는 것을 방지할 수 있다. ..
·CS/OS
주소 변환(Address translation)주소 변환은 프로그램이 사용하는 가상 주소를 실제 물리 메모리 상의 주소로 매핑하는 과정을 의미한다. 주소 변환은 하드웨어적으로 이루어지며 프로세서가 메모리 참조 명령어를 수행할 때마다 발생한다. 운영 체제는 메모리 관리자 역할을 수행하며 물리 메모리의 할당 및 회수, 가상 주소 공간과 물리 주소 공간의 매핑 등을 담당한다. 이를 위해 운영 체제는 메모리의 사용 현황을 파악하고 있어야 하며 프로세스 간의 메모리 보호와 공유를 적절히 제어해야 한다. 동적 재배치(Dynamic Relocation)동적 재배치는 프로세스의 주소 공간을 실행 시간에 동적으로 물리 메모리 상의 다른 위치로 이동할 수 있게 해주는 기술로 이를 통해 운영 체제는 메모리 관리를 보다 유연..
·CS/OS
초기 시스템초기 컴퓨터는 하나의 메모리에 단 하나의 프로세스만 올릴 수 있었다.위의 그림과 같이 물리 메모리에 하나의 실행 중인 프로세스가 존재하였으며 OS를 제외한 나머지 메모리를 사용했다.하지만 하나의 프로세스만 실행할 수 있고 메모리 공간을 다 차지하기 때문에 매우 안 좋은 활용성과 효율성을 보여줬다.시간이 흘러 멀티 프로그래밍을 지원하게 되면서 사람들은 컴퓨터를 더 효율적으로 사용하게 되었다. 멀티 프로그래밍과 시분할앞서 설명했던 초기 시스템의 문제를 해결하기 위해 시분할(Time Sharing) 기법을 사용하여 여러 개의 프로그램을 하나의 메모리에서 실행할 수 있도록 멀티 프로그래밍을 할 수 있게 메모리 구성이 바뀌었다.하나의 메모리에 여러 개의 프로세스를 올려 실행하게 되면서 메모리의 활용성과..
·CS/OS
PCB(Process Control Block)프로세스 제어 블록이라고도 불리는 PCB는 운영체제에서 프로세스에 대한 메타데이터(프로세스의 정보)를 저장한 구조체를 말한다.  프로세스가 생성되면 운영체제는 해당 PCB를 생성하게 된다. 그 이유는 각각의 프로세스는 프로세스 식별번호(PID)를 할당하게 되는데 운영체제는 다중 프로그래밍을 지원하므로 모든 프로세스를 추적해야 된다. 이때 PCB를 사용하여 프로세스의 실행 상태를 추적한다. 또한 PCB가 만들어지면 CPU에 저장되었다가 프로세스가 완료되면 PCB도 함께 제거된다. 프로세스의 메타데이터들이 PCB에 저장되어 관리된다. 이는 프로세스의 중요한 정보를 포함하고 있기 때문에 일반 사용자가 접근하지 못하도록 보호된 메모리 영역 즉, 커널 스택의 가장 앞..
·CS/OS
시스템 콜(System Call)시스템 콜은 운영 체제의 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.시스템 콜도 인터럽트의 일종으로 소프트웨어 인터럽트로 사용되기 때문에 이전 포스팅인 인터럽트를 참고해 보자. 운영체제 - 인터럽트(Interrupt)인터럽트(Interrupt)인터럽트는 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 일시 중단하고, 발생된 상황을 우선 처리한 후 실행 중이던 작업으로 복귀하hotechstory.tistory.com 이전에 포스팅한 인터럽트에서 살펴본 것처럼 운영 체제는 이중 동작 모드를 통해서 커널 모드와 사용자 모드로 구분하여 동작하게 되는데 특정 부분(하드웨어 접근과 같은 작업)에서 ..
·CS/OS
인터럽트(Interrupt)인터럽트는 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 일시 중단하고, 발생된 상황을 우선 처리한 후 실행 중이던 작업으로 복귀하여 계속 처리하는 것을 말한다.즉, 인터럽트는 어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키고 다른 작업을 처리한다.인터럽트가 발생되면 인터럽트 핸들러 함수가 모여 있는 인터럽트 벡터로 가서 인터럽트 핸들러 함수가 실행된다. 인터럽트가 필요한 이유선점형 스케줄링 알고리즘을 보면 어떤 프로세스가 Running 상태에서 다른 프로세스로 교체하기 위해 스케줄러가 작업을 중단시키게 된다.프로세스가 스스로 결정하는 것은 진행 중에 I/O 장치 혹은 다른 작업을 진행해야 해서 Block 상태가 되는 것과 프로세스가 종료되서..
·CS/OS
CPU 스케줄링 알고리즘CPU 스케줄링 알고리즘은 프로그램이 실행될 때 어떤 프로그램에 CPU 소유권을 줄 것인지 결정한다.CPU가 유후 상태가 될 때마다 운영 체제에서 준비 큐에 있는 프로세스 중 하나를 선택해서 실행하게 되는데 이때 CPU 스케줄러에 의해서 실행된다.CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당한다. CPU 스케줄링 알고리즘의 목표CPU 활용도를 최대 수준으로 유지한다.모든 프로세스에 CPU를 공정하게 할당한다.단위 시간당 실행을 완료하는 프로세스 수가 최대여야 한다.프로세스가 완료하는 데 걸리는 시간이 최소여야 한다.프로세스가 준비 큐에서 대기하는 시간이 최소여야 한다.프로세스가 응답을 생성하는 시간이 짧아야 한다. CPU..
·CS/OS
프로세스(Process)프로세스(Process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링의 대상이 되는 작업이라는 용어와 거의 같은 의미로 쓰인다.프로그램프로세스어떤 작업을 하기 위해 실행할 수 있는 파일실행되어 작업중인 컴퓨터 프로그램파일이 저장 장치에 있지만 메모리에 올라가 있지 않은 정적인 상태메모리에 적재되고 CPU 자원을 할당받아서 프로그램이 실행되고 있는 상태컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일실행 파일을 실행하여 작업 중인 프로그램 프로세스와 컴파일 과정앞서 설명했던 것과 같이 프로세스는 프로그램을 실행한 것인데, 예를 들어 프로그램은 구글 크롬 프로그램과 같은 실행 파일이며, 이를 두 번 클릭하면 구글 크롬 프로세..
·CS/OS
메모리(Memory)메모리는 일시적 또는 장기간 데이터를 저장하는 디지털 시스템이다.CPU는 그저 메모리에 올라와 있는 프로그램의 명령어들을 실행할 뿐이기 때문에 데이터와 명령어를 저장하기 위해서는 메모리가 가장 중요한 부분이다.  메모리 계층메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성되어 있다.메모리 계층 구조는 컴퓨터에서 사용 가능한 메모리를 최적화하는 데 도움이 되므로 컴퓨터 메모리에서 가장 필요한 것 중에 하나이다.메모리에는 여러 수준이 있으며 각 수준은 크기, 비용 등이 다르다. 계층 위로 갈수록 비용이 높고 속도가 빠르며 아래로 갈수록 용량은 커지지만 속도가 낮은 대신 가격이 저렴해진다.간단히 표로 정리하면 아래와 같다.분류휘발성속도용량CPU 레지스터O가장 빠름가장 적은 용량캐시(..
·CS/OS
운영 체제(Operating System)운영 체제는 사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스로 한정된 메모리나 시스템 자원을 효율적으로 분배해 준다.운영체제는 컴퓨터에서 항상 실행되는 하나의 프로그램이고, 다른 모든 프로그램은 응용 프로그램이라고 한다.우리가 컴퓨터를 직접 사용한다고 하면 상당히 어려운 일이 될 것이다. 또한 컴퓨터를 최대한 잘 활용한다는 것도 어려운 일이 될 것이다.이처럼 직접적으로 사용하기 어려운 컴퓨터를 보다 쉽게 사용할 수 있도록 사용자 친화적으로 제공하는 것이 바로 운영체제이다.그럼 우리가 운영체제를 통해서 컴퓨터를 맘대로 조작할 수 있게 되는데 우리가 원래 해야 했던 어려운 작업들을 운영체제가 대신해주게 된다.운영체제가 없었을 때 사용자가 직접 컴퓨터는 사용해야 하는데..
Hosae905
'CS/OS' 카테고리의 글 목록