#include <stdio.h>
#include <stdlib.h>
void recu();
int main(){
recu();
return 0;
}
void recu(){
int *a = (int *)malloc(sizeof(int) *100) ;
recu();
}
1. 위의 코드는 어떠한 문제점이 있는가? 실행시킬 경우 발생할 수 있는 문제를 적으시오.
2. OS차원에서 위의 프로그램의 실행을 허용해야 하는가? OS가 지원해야하는 방법을 쓰시오.
3. 저러한 프로그램으로부터 시스템을 보호할 더좋은 방법이 있다면 그것이 무엇인가? 자신의 생각을 쓰시오 .
1번부터 저런 변태문제 나와서 씨발 ..
저거 뒤에나오는 6문제 다 개처럼품
저거 리커시브 호출 하는 함수의 활성레코드에는 malloc한 포인터만 저장되고 실제 메모리 할당은 hip 영역에 되지 않나 ? 그래서 시스템스택이
다 쌓여서 그런게 아니라 , 대충 저때 오류 발생은 리커시브 때문이 아니라 hip영역에 더이상 메모리 할당 할수 없을때 발생한다 적고 햇는데
0000000000000000
일단 리커시브 호출 할땐 반드시 그 인자가 감소해서 탈출조건이 있어야한다. 그러나 오류는 시스템스택오버플로우가 아니라 malloc 요청 했을때
OS가 더이상 메모리를 줄 수 없을때 발생한다
적엇는데 맞나 ?
#include <stdlib.h>
void recu();
int main(){
recu();
return 0;
}
void recu(){
int *a = (int *)malloc(sizeof(int) *100) ;
recu();
}
1. 위의 코드는 어떠한 문제점이 있는가? 실행시킬 경우 발생할 수 있는 문제를 적으시오.
2. OS차원에서 위의 프로그램의 실행을 허용해야 하는가? OS가 지원해야하는 방법을 쓰시오.
3. 저러한 프로그램으로부터 시스템을 보호할 더좋은 방법이 있다면 그것이 무엇인가? 자신의 생각을 쓰시오 .
1번부터 저런 변태문제 나와서 씨발 ..
저거 뒤에나오는 6문제 다 개처럼품
저거 리커시브 호출 하는 함수의 활성레코드에는 malloc한 포인터만 저장되고 실제 메모리 할당은 hip 영역에 되지 않나 ? 그래서 시스템스택이
다 쌓여서 그런게 아니라 , 대충 저때 오류 발생은 리커시브 때문이 아니라 hip영역에 더이상 메모리 할당 할수 없을때 발생한다 적고 햇는데
0000000000000000
일단 리커시브 호출 할땐 반드시 그 인자가 감소해서 탈출조건이 있어야한다. 그러나 오류는 시스템스택오버플로우가 아니라 malloc 요청 했을때
OS가 더이상 메모리를 줄 수 없을때 발생한다
적엇는데 맞나 ?
hip 이 아니고 heap 겠지 ,탈출조건은 edge condition 이라고해. 인자가 항상 감소해서 edge condition 이 되는거 아니거든. 따라서 \"반드시 그 인자가 감소해서 탈출조건\" 은 잘못된 표현이다. 시스템 스택 오버 플로가 아니라, 해당 프로세스나 쓰레드의 스택오버플로우야. 담부터는 그냥 스택오버플로라고 표현하던지 아니면 좀더 명확히 표현해. 보통 시스템 스택 이라고 하면 커널모드 스택을 말하는 거야. 잘모르는 단어 막쓰지 말아.
1. 니말이 잘이해는인가는데 대충맞는거 같고. 2. 메모리 할당불가시 mallox 에서 이미예외처리 되있는대 그걸 못잡은 사용자잘못은듯? 3. sbrk()
1. 저 문제가 edge condition 을 기술하지 않고 사용한 재귀함수의 문제점을 묻는건지.. 무한정 힙에서 메모리를 요청했을때 발생할수 있는 문제점을 묻는건지, 둘다를 묻는건지.. 내가 볼때는 문제자체가 별로다.
2. 이문제의답은 OS 를 설계하기에 따라 달라지지만, 일반적인 개념의 OS 라면, 저위의 문제는 프로세스내에서 해결해야 할 문제임으로 프로그래밍언어 차원에서 해결해야할 문제다.
3.\"시스템을 보호하는 방법\" 에서 시스템이라는것이 운영체제 시스템을 말하는건지, 프로세스를 말하는건지 애매모호한데, 전자의 경우는 대부분 관리자(super)모드라는 모드를 두어서 운영체제 자원을 보호하게 하는 방법이 있고, 후자의 경우는 tail call optimization 같은 방법으로 위와 같은 코드가 스택오버플로가 발생하지 않다록 프로그래밍언어 차원에서 해결하는 방법이 있다.
아 망햇다 ㅜㅜ