기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요.

멀티코어 환경에서 리눅스 IRQ 프로세싱 관련 질문드립니다.

제가 심도 있는 디바이스 드라이버를 작성해본 적이 없어서 정확히 잘 모르겠고,

구글링해도 제가 원하는 질문의 답이 없어서 글 남겨봅니다.


Core0, Core1 두개의 Core가 있다고 가정합니다.


1.

Core 0에서 동작하는 프로세스에서 sd카드 데이터를 Read합니다.

그러면 커널로 트랩이 발생하고, 디바이스 드라이버에서 sd카드 컨트롤러에게

Read 명령을 주고, WFI를 호출합니다. 잠시뒤에 인터럽트를 Core 0에서 받고

디바이스 드라이버에서 Read 명령을 완료합니다.

이 경우에는 잘 동작하겠지요.


2.

위와 같은 똑같은 상황이지만 WFI를 호출한 뒤에 완료인터텁트가 Core0로

가지 않고 Core1로 간다면 Read명령은 무리 없이 완료되나요?

어쩌피 각 Core0, Core1은 같은 핸들러를 가지고 있고, 

각 Core안의 커널이 보는 가상 메모리는 같기때문에 문제가 없을거 같은데

맞나요? 물론 성능을 떨어지겠지만요 ㅎ


감사합니다.


쾌도난마

2015.03.08 01:50:11
*.169.219.53

저도 자세히 알지 못하고 짧은 경험이라 정확한 답변이 될지 모르겠습니다.


제가 생각하는 시퀀스는 다음과 같습니다.


user application 에서 sdcard read(file read) 명령이 일어나면

vfs->fs filesystem-> block device driver -> sd_card host (mmc) -> sdcard read

시퀀스는 다음과 같을 것인데 이렇게 직렬적으로 일어나지 않습니다.


user app read 명령을 실행하는 task(thread)

generic block device driver kernel thread (이 부분이... 확실하지 않음 ㅜㅜ)

mmc host kernel thread 등이 있어서

서로 물고 물려서 user app read 명령을 실행한 task 는 read 된 결과를 가져 오는데

나름 오랜시간(?) sleep 한 이후에 결과를 가져 갑니다.


디바이스 드라이버에서 sd카드 컨트롤러에게

Read 명령을 주고, WFI를 호출합니다. 잠시뒤에 인터럽트를 Core 0에서 받고

디바이스 드라이버에서 Read 명령을 완료합니다.


이부분이 이해가 안되는데 

제가 알고 있는 보통의 디바이스 드라이버 시퀀스는 다음과 같습니다.

1) mmc host kernel thread 가 sdcard 에 read 명령을 줌 그 명령이 완료 될때까지 sleep 함

2) mmc 인터럽트 발생하면 현재 잠자고 있는 thread 를 깨워줌(스케쥴링 명단에 올림) ( bottom half )

3) mmc host kernel thread 는 스켈쥴링 되어 read 가 완료 됐다는 것을 알고 결과 값을 리턴함

   (여기에서도 아마 잠자고 있는 block device driver 관련 thread 를 깨움)

4) ... 물고 물려서 잠자던 user app read 명령 task 가 완료되어 user space 로 넘어감.


제가 생각하는 건 이렇고요(틀렸을 수도 있습니다)

멀티 코어 cpu 0, cpu1 어디에서든지 위 2번이 수행 되더라도

하는 주 역활은 잠자는 task(thread)를 깨워주는 역할이므로 

spin_lock 처리만 잘 되어 있다면 동작하는데 아무런 문제가 없을 듯 합니다.



Supsupi

2015.03.09 18:33:28
*.254.202.140

답변 감사드립니다. (_ _)


별도의 쓰레드가 있군요 ?

네트워크의 경우에도 같을까요?



List of Articles
번호 제목 글쓴이 날짜sort 조회 수
6188 rebis보드에 카메라 모듈에 과한 질문입니다. [2] 노현우 2006-10-01 1161
6187 이홍석님의 패키지를 따라하다가 문제가 좀 있네요. <==[완료] [4] 박영학 2006-10-02 1825
6186 USB자동 마운트 결과 <== [완료] [1] 박영학 2006-10-03 1120
6185 고도리님 DM9000A 판매처? [1] 윤광윤 2006-10-05 906
6184 혹시 실수 연산을 정수 연산으로 바꿔주는 lib 같은거 있나요? &... [1] 한승혁 2006-10-05 1424
6183 VOIP 관련 오디오코덱자료를 얻으려면 ... [1] 장석원 2006-10-06 965
6182 s3c2413 보드에 리눅스커널2.6의 시리얼콘솔을 새로 포팅하려 하는데 ... [1] 장석원 2006-10-08 1165
6181 u-boot 1.1.4의 u-boot-arm.h 관련 질문...입니다..[완료] [2] 손진호 2006-10-14 1132
6180 이재훈님의 OPIE, TSLIB 해보신분 계신가요? <==[완료] [4] 박영학 2006-10-14 1036
6179 3차보든 언제 나오는지요 [3] 김영호 2006-10-19 1070
6178 밑에 글에 이어서 SD에 포팅에 대하여<=[완료] [6] 서성준 2006-10-20 1536
6177 오늘 가입한 신입인데요..궁금한게 있어서요.. [1] 김영일 2006-10-20 917
6176 [궁금] 3차 공제와 관련해서.. <= [완료] [3] 이득재 2006-10-22 1313
6175 SD/MMC 모듈 올린후<=[완료] [5] 서성준 2006-10-24 1472
6174 [s3c2440] FTDI USB Serial converter사용하고 싶은데요??[완료... [8] 김창연 2006-10-24 7849
6173 [질문] printf 에 관해 <= [완료] [2] 양용현 2006-10-26 856
6172 SMDK2440A 오디오 재생 관련 [4] 조성현 2006-10-27 1431
6171 부트로더에서 자동부팅을할려구하는데요..<==완료 [1] 윤현승 2006-10-27 954
6170 cs8900에서 받는 irq 핀을 변경하려는데... [2] 이율삼 2006-10-30 964
6169 s3c2440에서 터치스크린 설정시 ==> [완료] [7] 강권일 2006-11-01 1584

사용자 로그인