'OS > 우분투' 카테고리의 다른 글
Find 명령어의 모든것 (0) | 2011.04.26 |
---|---|
기본키 모음에 접근하려면 암호를 입력하십시오 (0) | 2011.02.10 |
우분투 패키기 완전 삭제하기 (수동) (0) | 2010.09.11 |
컴퓨터1(xp)와 컴퓨터2(우분투) samba로 연결설정 (0) | 2010.07.30 |
우분투 에서 virtualbox 사용시 오류 (0) | 2010.07.25 |
Find 명령어의 모든것 (0) | 2011.04.26 |
---|---|
기본키 모음에 접근하려면 암호를 입력하십시오 (0) | 2011.02.10 |
우분투 패키기 완전 삭제하기 (수동) (0) | 2010.09.11 |
컴퓨터1(xp)와 컴퓨터2(우분투) samba로 연결설정 (0) | 2010.07.30 |
우분투 에서 virtualbox 사용시 오류 (0) | 2010.07.25 |
5. 프로세스의 생성 사용 및 소멸 (0) | 2010.09.22 |
---|---|
4. 프로세스(process)? (0) | 2010.08.25 |
3. 하드웨어 보호(Hardware Protection) (0) | 2010.08.17 |
2장 컴퓨터 구조 (0) | 2010.08.16 |
1장. OS란? (0) | 2010.08.12 |
main()
{
printf("hello world\n");
fork();
printf("goodbye world\n");
}
결과.
hello world
goodbye world
goodbye world
이제 다음으로 fork()로 자식 프로세스를 생성후 리던되는 값을 확인해 보도록하자. 코드를 보도록 하자
main(){
pid_t pid;
printf("pid = %d \n", pid);
printf("fork_= %d\n", fork());
}
결과는pid = 9331877 -- pid
fork_= 5999 - 부모 프로세스로 리턴되는 값 = 자식프로세서의 pid
fork_= 0 - 자식프로세스로 리턴되는 값
여기서 pid_t는 process id type로서 integer과도 서로 컨버전이 되는 정수값이다. 이는 바로 프로세스의 이름표이다.한 시스템 내부의 모든 프로세스들은 각각 고유의 프로세서 id를 가지게 된다. 대부분 일정한 규칙을 가지고 id를 생성하게 되는데 몇몇 개는 시스템 차원에서 고정된값을 가지고 있기도 하다.위의 실행 결과에서도 볼 수 있지만, fork()는 부모 프로세스에게 자식프로세서의 pid를 리턴하고 자식프로세스에게는 0을 리턴해주게 된다.또한 실행 순서도 알 수 있게된다. 부모프로세스로 리턴 후 자식프로세서 로 리턴 수행그리고 나서 다음의 코드를 보자main() { pid_t pid; if((pid = fork()) == 0) printf("I am a child process\n"); else 서 printf("I am a parent process\n"); }
결과는 여러분도 예상했다싶이
I am a child process I am a parent process
자, 다음을 분석하면 처음 if문에서 부모프로세스로 리턴되는 값을 pid에 넣고 0 이랑 같음을 비교한다. 0이랑 같지 않으므로 else가 수행되어 두번째 printf가 수행되고 , 다음으로 자식프로세스가 수행되면서 fork()의 리턴값이 0이되므로 if문안에서 첫번째 printf문을 수행하게된다.재미있는 사실은 보통 자식 프로세스를 생성하게될 때 for문을 사용하여 쭉 생성하고 배열에 pid를 담아두어 각 요소별로 pid의 값을 제어할 수 있도록 프로그래밍 하게 된다. 또한 소스 마지막 부분에는 getpid()하는 함수를 붙여둠으로써 어떤 프로세스가 cpu를 점유하는지 쉽게 알 수 있도록 하고 있다.
이렇게 여러개의 프로세스를 생성함에 있어서 또 한가지 중요한 개념은 바로 싱크이다. 예를 들어 부모프로세스가 홀수를 출력하고 자식 프로세서가 짝수를 출력할때 홀수다음반드시 짝수 그다음 홀수 이런식으로 프로세서들끼리의 의사소통을 통해서 이러한 순서를 맞추는 과정을 싱크라하는데, sleep()함수를 통해서도 조절할 수 있지만 차후에 싱크라는 개념을 중요하게 다루게 될것이다. 차후에 적어보도록 하겠다.
다음으로 차일드 프로세스의 의 용도에 대해 알아보겠다. 크게 두가지로 볼 수 있는데
첫번째는 강력한 콜인 exec** ()이다. **에는 c,p,l,v 이렇게 네글자가 한쌍으로 조합되어 적용되는데 이는 넘겨주는 매개변수에 따라서 달라진다. 그냥 간단하게 exec콜은 지정한 디렉토리 안에 있는 바이너리를 차일드 프로세스의 몸통과 합체를 시켜버리는 즉, 프로그램 내부에서 다른 프로그램을 차일트프로세스화 시켜버리는 일을 한다.
두번째는, 서버를 구축할 때 유용하다. 물려들어오는 여러 사용자들에게 자식 프로세스를 하나씩 발행해 주는 것이다.
이상으로 용도에 대해 알아보았다.
마지막으로 미아숙청 룰에 대해 이야기하고 마무리 짓도록 하겠다. 유닉스는 엄격한 룰을 가지고 있는데 그것은 바로 미아는 절대로 방치하지 않는 다는 정책이다. 쉽게 말하면 부모프로세스없는 자식프로세스는 존재하지 않도록 발견즉시 종료시켜버린다. 부모프로세스가 종료될때 무조건 자식프로세스들까지 삼족을 멸하거나, 비정상적인 부모프로세스의 종료로 인한 자식프로세스의 미아화가 발견되었을 때는 바로바로 종료시킨다. 이는 소중한 메모리공간이 미아로 가득차는 불상사를 방지하고자 하는 정책이다.
[출처] 5. 프로세스의 생성 사용 및 소멸 |작성자 냉동여우
[출처] 5. 프로세스의 생성 사용 및 소멸 |작성자 냉동여우
[출처] 5. 프로세스의 생성 사용 및 소멸 |작성자 냉동여우
6. 씨피유 스케줄링 (0) | 2010.09.23 |
---|---|
4. 프로세스(process)? (0) | 2010.08.25 |
3. 하드웨어 보호(Hardware Protection) (0) | 2010.08.17 |
2장 컴퓨터 구조 (0) | 2010.08.16 |
1장. OS란? (0) | 2010.08.12 |
PXA255의 OS타이머 레지스터 계층 (0) | 2010.09.25 |
---|---|
exception handler 소스 분석! (0) | 2010.09.15 |
ARM 에서 소프트웨어 인터럽트(Software interrupt)발생시 ISR 과정 이해하기! (0) | 2010.09.14 |
임베디드개발 보드의 LED 활용! (0) | 2010.09.14 |
2. 개발환경 테스트 에러발생 (0) | 2010.09.11 |
stmfd store multiple full descending
저장 한꺼번에쭉 꽉차게 주소감소하면서
ldmfd load multiple full descending
꺼냄 한꺼번에쭉 꽉차게 주소감소하면서
강의를보고 이해하기로 저렇게 이해했습니다. 그러면 stmfd에서 낮은 주소방향으로 스택이 쌓여가다가 ldmfd에서도 또 낮은 주소방향으로 주소 포인터가 이동하면서 꺼내야 되는데 왜 ldmfd에서는 높은 주소방향으로 주소 포인터가 이동하면서 쌓아놨던 스택을 꺼내는 걸까요? store와 load 명령어의 동작 방식 때문에 그렇다면 st와 ld로 인해 위에 d의 의미가 감소가 아니라 증가로 바뀌는 것인가요?
단순히 push pop개념으로 이해하면 그냥 넘어가겠는데, 명령어상 문자상의 의미로는 틀린거같아서요.
ldmfa라고 해야 맞는 명령어이지 않을까요?
왜 저렇게 쓰는지 밍모르겠어요.
다른 분은 full descending 의미는 store에서 라고 하셨는데 그 말은 st냐 ld에 따라 마지막 d의 의미가 달라진다는 말씀이신 것같은데요. 제가 생각하는게 맞나요?
또 한가지 더요.
ldmfd는 현재 주소에서 큰 주소 방향으로 이동하는데 , 주소가 증가하고 데이터 빼고 하는 pop 인가요? .......1
"" , 데이터 빼고 주소가 증가하는 pop 인가요? .......2
1번 이 맞는 것같은데... 확실한지 모르겠네요
/////////////////////////////////////
이 질문에 대한 대답은 이렇다. stmfd와 ldmfd를 명령어 적인 해석 보다는 push pop의 개념으로 이해하라!
PXA255의 OS타이머 레지스터 계층 (0) | 2010.09.25 |
---|---|
pxa255 인터럽트 계층 이해하기 (1) | 2010.09.17 |
ARM 에서 소프트웨어 인터럽트(Software interrupt)발생시 ISR 과정 이해하기! (0) | 2010.09.14 |
임베디드개발 보드의 LED 활용! (0) | 2010.09.14 |
2. 개발환경 테스트 에러발생 (0) | 2010.09.11 |
pxa255 인터럽트 계층 이해하기 (1) | 2010.09.17 |
---|---|
exception handler 소스 분석! (0) | 2010.09.15 |
임베디드개발 보드의 LED 활용! (0) | 2010.09.14 |
2. 개발환경 테스트 에러발생 (0) | 2010.09.11 |
1. 개발환경 구축하기 (0) | 2010.09.11 |
exception handler 소스 분석! (0) | 2010.09.15 |
---|---|
ARM 에서 소프트웨어 인터럽트(Software interrupt)발생시 ISR 과정 이해하기! (0) | 2010.09.14 |
2. 개발환경 테스트 에러발생 (0) | 2010.09.11 |
1. 개발환경 구축하기 (0) | 2010.09.11 |
운영체제 만들어보자 (0) | 2010.09.11 |
msoft-float 이라는 옵션의 문제였다.
gumstix_uboot 디렉토리에 가서 grep -nR 'msoft-float' ;;; 이렇게 검색하면 gumstix_uboot/cpu/ 아래 아키텍쳐별로 주루룩 나오는데
우리가 봐야될거는 pxa폴더이다. 즉, gumstix_uboot/cpu/pxa/config.mk 파일을 열어서 msoft-float라는 글자만 쏙 제거해준다.
그리고gumstix_uboot 로 돌아와서
make distclean
make gumstix_config
make all
을 실행하면 에러가 사라지고 부트로더 이미지 파일의 생성과 함께 평화가 찾아온다.
exception handler 소스 분석! (0) | 2010.09.15 |
---|---|
ARM 에서 소프트웨어 인터럽트(Software interrupt)발생시 ISR 과정 이해하기! (0) | 2010.09.14 |
임베디드개발 보드의 LED 활용! (0) | 2010.09.14 |
1. 개발환경 구축하기 (0) | 2010.09.11 |
운영체제 만들어보자 (0) | 2010.09.11 |
기본키 모음에 접근하려면 암호를 입력하십시오 (0) | 2011.02.10 |
---|---|
리눅스에서 파일내에 원하는 문자열 검색 (0) | 2010.09.24 |
컴퓨터1(xp)와 컴퓨터2(우분투) samba로 연결설정 (0) | 2010.07.30 |
우분투 에서 virtualbox 사용시 오류 (0) | 2010.07.25 |
헷갈리는 tar옵션 (0) | 2010.07.22 |
exception handler 소스 분석! (0) | 2010.09.15 |
---|---|
ARM 에서 소프트웨어 인터럽트(Software interrupt)발생시 ISR 과정 이해하기! (0) | 2010.09.14 |
임베디드개발 보드의 LED 활용! (0) | 2010.09.14 |
2. 개발환경 테스트 에러발생 (0) | 2010.09.11 |
운영체제 만들어보자 (0) | 2010.09.11 |