날씨가 정말 더워요 ㅠ

 

게시판이 너무 썰렁하기도 해서 질문 올립니다. ㅋ

 

kernel stack은 각 프로세스마다 가지고 있는 것으로 알고 있습니다.

그리고 kernel이 가지고 있는 함수를 사용하면 항상 이 kernel stack을 사용하는 것으로 알고 있습니다. (인터럽트도 마찬가지구요)

그렇다는 것은 context_switch()함수도 kernel stack에 쌓인 다는 것이겠지요.

 

context_switch()함수는 매번 커널 모드에서 유저모드로 돌아갈 때 마다 need_sched 변수가 1로 세팅 되어있을 때,

또는 disk I/O같은 요청을 했을 때, wait(), read(), write() 같은 함수를 수행 할 때 내부적으로 호출 하는 것으로 알고 있습니다.

 

문제는 context_switch()함수에서 하는 다음의 일련의 과정들입니다.

 

1. save current PCB(process control block)

2. select next process

3. load next PCB

4. return(context_switch()함수 호출 한 곳으로 리턴, 커널의 어느 함수 일듯)

 

여기서 1. save current PCB 과정에서 현재 수행중인 프로세스의 rgisters 는 아마도 현재 프로세스의 kernel stack에 저장될 것 같은데요

(생각입니다. kernel stack도 PCB의 일부라서 저장되니깐요)

 

그것을 제외 하더라도 가장 궁금한점은 PC의 값의 save와 load 과정입니다.

 

현재 수행중인 프로세스의 레지스터들을 선택적으로 save하고 load하는 과정이 아키텍처마다 다르다면 이해하기가 어려울 것 같지만,

질문의 요지는 PC(program counter)값이 context_switch()함수 내에서 save가 된다면, 나중에 실행될 때 context_switch()함수내에서 시작하게 될 것 같습니다. 제 생각이 맞는 건가요?

 

그럴 것 도 같은 이유는 kernel stack의 내용 또한 save 되고 load 됩니다.

커널모드에서 sys_read()함수에서 I/O 요청 후 context_switch()함수를 호출 한다면, 현재 프로세스는 preempt당하고

(여기서 kernel stack에는 sys_read()함수와 context_switch()함수에 대한 local 변수, 리턴 주소와 같은 정보가 들어 있을 것이고, register와 마찬가지로 save와 load될 것 입니다..)

나중에 다시 수행시 context_switch()함수에서 깨어나서 sys_read()함수로 리턴되어(kernel stack에서 pop해서) 나머지 작업 수행 후(?), 유저모드로 복귀 할 것입니다. 복귀장소는 read()함수 다음 instruction이겠지요.

 

너무 깊게 생각한건가요?;;

아키텍처마다 다를 수 있기 때문에 더 정확히는 커널 소스를 분석하면 알 수 있을 듯 합니다.

그래도 한번 같이 토론했으면 해서 올려봅니다:D

 

그럼 내일 봐요 :D

 

* 인텔기반으로 설명한 context_switch() 함수 : http://galaxyra.linuxstudy.pe.kr/galaxyra/tag/switch_to

 

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 커널 스터디 관련 Q&A 게시판 입니다. [5] woos 2016.04.09 2194
1725 [잡담] O(1) 스케쥴러에서 [5] 박은병 2008.04.02 13742
1724 u-boot 분석 참고자료 file 구본규 2012.07.27 13314
1723 [추가] linux, busybox .config / build 방법 [4] file 구본규 2012.07.29 13178
1722 CFS 스케줄러 기초 정리 홍문화 2011.05.27 12874
1721 이클립스에서 ARM Linux 개발 툴 사용하기(DS-5) [1] file 와사 2013.08.15 12870
1720 x86 linux booting 과정 file 백창우 2007.02.23 12734
1719 [문의] linux device driver 개정 3판 가지고 계신분? [6] 맥주 2008.03.27 12442
1718 링크 레지스터 오프셋 [6] 정현철 2011.06.12 12360
1717 안녕하세요~ 소성은 입니다~ [5] file 소성은 2010.04.05 12159
1716 [문서] 커널 분석 문서입니다. file 맥주 2008.11.10 12087
1715 커널 소스 분석에 도움을 주는 도구들 구본규 2012.08.06 12006
1714 RealMode? ProtectedMode? [2] 김태훈91 2012.05.11 11951
1713 linux부팅과정 설명 문서 [3] file 이상철 2009.03.18 11768
1712 ELF 파일 포맷 정리 [6] 도영주 2013.05.04 11536
1711 [x86] fixed_addresses pororo 2012.03.04 11498
» kernel stack과 이를 이용하는 context_switch()사이의 연관성에 대한 질문 [11] 이종인 2011.05.27 11433
1709 memory map in powerpc kernel [1] file 김강년 2007.07.08 11267
1708 커널 스터디 6기 멤버 소개(arm-11 mp-core) 소개 페이지로 이동 예정 [4] 강진성 2010.03.24 11224
1707 리눅스 커널 초기화(ARM) 참고 자료 [2] file 유강희 2010.04.07 11221
1706 다들 주무시죠?? 자~ 질문입니다 ㅋ [4] 변유준 2007.06.16 11220
XE Login