프로세스 구조와 스택 오버플로우 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 : 종료를 진행할때, 프로세스가 가지고 있는 파일, 시스템 리소..
프로세스(process)란? 실행중인 프로그램을 프로세스라고 부른다. 프로세스 : 메모리에 올려져서, 실행중인 프로그램 코드이미지(바이너리): 실행파일, 예:EELF format프로세스라는 용어는 작업, task, job이라는 용어와 혼용되어 쓰인다. 응용 프로그램 =! 프로세스 응용 프로그램은 여러개의 프로세스로 이루어질 수 있음. 하나의 응용 프로그램은 여러개의 프로세스(프로그램)가 상호작용을 하면서 실행될 수 도 있음 간단한 C/C+ 프로그램을 만든다면 -> 하나의 프로세스 여러프로그램을 만들어서, 서로 통신하면서 프로그램을 작성할수도 있음(IPC기법 : 프로세스가 서로 통신하는 기법) 누가 프로세스 실행을 관리할까? => 스케쥴러 스케쥴링 알고리즘 어느 순서대로 프로세스를 실행시킬까? 목표 시분할..
스케쥴링-멀티 프로그래밍 최대한 CPU를 많이 활용하도록 하는 시스템 놀고있는 CPU를 방지하여 시간 대비 CPU 활용도를 높일 수 있음 응용프로그램을 짧은 시간안에 실행 완료를 시킬 수 있음. 응용 프로그램은 온전히 CPU를 쓰기 보다, 다른 작업을 중간에 필요로하는 경우가 많습니다. 응용 프로그램이 실행되다가 파일을 읽는다. => 저장매체에서 파일을 읽음 응용 프로그램이 실행되다가 프린팅을 한다. 코드예시를 보고 멀티프로그래밍을 더 잘 이해해보자. 저장매체에서 해당 파일이 open이 가능한지의 결과값을 가져와야 그 다음 코드를 실행 시킬 수 있음. CPU 활용도(CPU utilization, CPU 활용시간/일정시간 * 100) 메모리 계층 - 컴퓨터 구조 복습 응용프로그램이 파일에 접근을 해야할 때..
명이나물 라이브러리