
컨텍스트 스위칭(문맥교환) CPU에 실행할 프로세스를 교체하는 기술 PCB에 CPU의 PC, SP 정보를 저장, 운영체제 구현에 따라 PCB정보를 메인메모리에 저장 실행할 프로세스의 PCB정보를 CPU의 PC, SP에 저장한다. 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트 해서, 메인 메모리에 저장. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 PCB에 넣고, 실행 디스패치(dispatch) : ready상태의 프로세스를 running상태로 바꾸는 것. 굉장히 짧은 시간 ms단위로, 프로세스 스위칭이 일어난다. 어떻게하면 조금이라도 컨텍스트 스위칭 시간을 짧게 할 수 있을까? C언어가 아닌, 어셈블리어로 컨텍스트 스위칭 코드를 작성. 스위칭 속도가 빠른대신 코드의..

프로세스와 컨텍스트 스위칭 PC(Program Counter)와 SP(Stack Pointer) 각각에 해당 주소값이 저장되며, 현재 실행중인 프로세서를 잠시 중단하고, 다른 프로세서를 실행 시키는 것을 컨텍스트 스위칭이라고 부른다. 이 컨텍스트 스위칭을 위해서 현재 실행중인 프로세서의 상태 및 정보가 PCB에 저장된다. 컨테스트 스위칭에 문제가 있으면, 운영체제가 느려지게 되며, SP와 CP는 'C언어'가 아닌, '어셈블리어'로 이루어져 있다. PCB(Process Control Block) Process Context Block 이라고도 함. 프로세스가 실행중인 상태를 캡쳐/구조화해서 저장한다. 운영체제에서 PCB를 관리한다. Process ID Register 값(PD,..

프로세스 구조와 스택 오버플로우 DATA에는 두가지 저장공간이 있다. BSS : 초기값이 없는 전역변수int global_data1; DATA : 초기값이 있는 전역변수int global_data2=0; 그 밖의 함수 안에 있는 지역변수는 Stack frame에 들어가게 된다.int main() { int *data; } ## 스택오버플로우 간단히 살펴보기 - 컴퓨터의 구조와 프로세스의 구조를 사용해 해킹하는데에 많이 이용되었다. - 할당된 6개의 저장 공간에, 각각 a를 저장하는데, 이때, aaaaacc로 입력을 하게되면, 저장 stack을 벗어난 그 다음의 stack위치에 값이 저장되게 된다. 이때, 해커들은 자신들이 설정해놓은 주소를 저장시켜, 해커 프로그램이 작동하도록 한다.

heap 은 동적으로 메모리를 생성하는 저장소 이다. 동적으로 메모리를 생성하는 함수에는 C언어에서 mallloc이 있으며, 아래 예시를 통해 heap에 저장공간이 어떻게 생성이 되며, stack은 어떻게 작동하는지를 살펴보았다. 왜 heap이라는 것이 필요할까? => 컴파일러 단에서 전역변수를 위한 공간을 미리 만들어 놓아 DATA에 저장을 시켜놓는데, malloc이라는 함수는 실행 코드 안에서 용량을 만드는 함수로, 이 저장 공간은 정적으로 알 수 없기, 때문에 HEAP이라는 동적 저장공간을 지원한다.

프로세스 구조 컴파일 : 0과 1로 된 기계언어로 변환 되는 것.(바이너리라고도 부름) CODE : 프로그램 코드가 컴파일된 언어로 저장되는 영역 DATA : 프로그램 내에 선언된 변수의 값을 저장 STACK : 함수가 실행 이후의 동작에 대한 주소인 return address값을 동적으로 저장-> 첫번째인자 저장 -> 두번째 인자 저장 -> 두번째 데이터 삭제 -> 첫번째 데이터 삭제 -> return address 삭제 -> 해당 함수 다음의 코드 실행 HEAP : 대표 적으로 molloc()이라는 함수가 있다. 특정 메모리 공간을 동적으로 생성하게 되는데, 이처럼 HEAP은 별도로 사용할 공간을 만드는 곳이다. 코드 예시 보기 void meaningless는 단수 함수 선언. stack 자료구조의 ..

인터럽트 내부동작 시스템 콜 인터럽트 시스템 콜 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어, CPU에게 실행시켜야한다. 시스템 콜 실제 코드 eax 레지스터에 시스템 콜 번호를 넣고, ebx 레지스터에는 시스템 콜에 해당하는 인자값(함수의 인자 값 포함)을 넣고, 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘겨줌 mov eax,1 // 1 = 시스템콜번호 mov ebx,0 // 0 = 인자 int 0x80 // 무조건 마지막에는 CPU에서 제공하는 OP code(인스트럭션 코드)가 들어가며, intel에서 제공하는 것 중에는 int가 있다. // 0x80 = 인터럽트 번호, 시스템 콜은 0x80으로 정해져 있다. 1 = 시스템콜번호 0 = 인자 int 0x80 : 무조건 마지막에는 CPU..

인터럽트란? CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우 CPU에 알려서 처리하는 기술어느 한순간 CPU가 실행하는 프로그램은 하나! => 즉, ready -> running -> waite(block) 상태에서 다시 ready로 가려면 어떤한 신호가 필요한데, 이를 interrupt라고 한다. 이벤트 발생 -> interrupt -> kernel모드 변경 인터럽트 필요 이유 => 이벤트 정의부터 처리까지 담당하는 운영체제 선점형 스케쥴러 구현 - 프로세스 running 중에 스케쥴러가 이를 중단 시키고, 다른 프로세스로 교체하기 위해, 현재 프로세스 실행을 중단시킴 - 그러려면, 스케쥴러 코드가 실행이 되어서, 현 프로세스 실행을 중지..

선점형과 비선점형 스케쥴러 비선점형 프로세스가 자발적으로 blocking상태로 들어가거나, 실행이 끝났을 때만, 다른 프로세스로 교체 가능 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음 예) A가 프로세스가 자체적으로 running이 아니어야만(Block 혹은 종료 혹은 ready 상태) B 프로세스가 실행되는 것. 선점형 프로세스 running 중에 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체 가능 하나의 프로세스가 다른 프로세스 대신에 CPU를 차지할 수 있음. 스케쥴러 실행이 프로세스 스테이트에 영향 받지 않음. 이전 프로세스 중단 및 다음 프로세스 실행 기준에 고려할게 많기 때문에 비선점형보다 이후에 나옴. 예) A 프로세서가 스케쥴러에 의해 실행될 때, 어느 시점..

프로세스 상태와 스케쥴러 멀티 프로그래밍 : CPU 활용도를 극대화하는 스케쥴링 알고리즘 Wait: 간단히 저장매체로부터 파일 읽기를 기다리는 시간으로 가정 프로세스 상태 5가지 주요 상태 정보 3가지 ready state : CPU에서 바로 실행가능 상태(실행 대기 상태) running state : 현재 CPU에서 실행상태 => 단일 CPU라면, running state의 프로세스는 1개 또는 0개가 된다. block state : 특정 이벤트 발생 대기 상태(예: 프린팅이 다 되었다!) => waite 상태로 예를 들어 파일 읽기 요청을 기다리는 상태임. 요청이 오면 ready state로 변경됨. new : 프로세스 생성 중 exit : 종료를 진행할때, 프로세스가 가지고 있는 파일, 시스템 리소..